配置Nuodb DataSource

NuoDB includes a DataSource class for providing connections. 使用此类的优点是:

  • 它隐藏了与管理NOODB连接相关的许多复杂性,例如处理Nuodb AP冗余并在事务过程终止时重新连接到NOODB数据库(请参阅 验证连接 below).

  • 它支持连接池(默认情况下启用)。

For these reasons the DataSource is preferred over the old DriverManager approach.

Internally, the DataSource class maintains a pool of connections for you and ensures that each thread in a multi-threaded application gets its own connection. 由于NOODB架构的分布性质,这很重要。

The DataSource API is documented at Java JDBC驱动程序API参考.

The NuoDB com.nuodb.jdbc.DataSource class can be configured three ways (see 使用Java JDBC驱动程序的数据库操作)

  1. 使用Setter方法,每个方法对应于下面列出的属性。 For example to set the maxidle. property, invoke DataSource.setMaxIdle(50);

  2. Set each property in a Java Properties object and pass it to the DataSource constructor. Each property name is defined by a corresponding PROP_XXX constant on the DataSource class:

    Properties properties = new Properties();
    ...
    properties.put(DataSource.PROP_MAX_IDLE, 50);
    DataSource dataSource = new DataSource(properties);
  3. AS(2)但是从属性文件加载Java属性对象。 这允许外部化的属性,可以在无需重新编译代码的情况下更改,并建议使用。

    URL. =jdbc:com.nuodb://localhost/test
    ...
    maxidle.=50

数据源属性

A small number of connection properties overlap DataSource properties. Specifically:

  • 登录信息: 用户名 and 密码 can be defined either as connection properties in the URL or as DataSource properties. 出于安全原因,不建议在URL中定义这些。

  • 默认架构: You can either specify schema=…​ in the connection URL or use the DataSource property defaultschema.. 无论是完全有效的。

Nuodb支持的大多数属性’S DataSource允许配置内部连接池。

财产 描述 默认

用户名

The connection username to be passed to the NuoDB JDBC driver to establish a connection, unless DataSource#getConnection(username,password) is used.

-

密码

The connection password to be passed to the JDBC driver to establish a connection, unless DataSource#getConnection(username,password) is used.

-

defaultschema.

此池创建的连接的默认架构。

-

防救死

此池创建的默认只读状态。 If not set, then readOnly is determined by the Protocol.IsReadOnly which retrieves the default value of 错误的 from the server.

-

defaultautocommit.

此池创建的默认自动提交状态。 If not set, the default is the NuoDB JDBC driver default. (If not set, the setAutoCommit() method is not called.)

-

initialsize.

启动池时创建的初始连接数。

10

最大

可以同时从此池中分配的最大连接数(活动或空闲)。

100

maxidle.

始终应在池中保存在池中的最大连接数。

最大

minidle.

应始终应保存在池中的最小既定连接(有效或空闲)。

initialsize.

maxwait.

在抛出异常之前,池等待池等待(当没有可用连接时)的最大毫秒数。

0

克鲁吉

保持这种连接的时间以毫秒为单位。 When a connection is returned to the pool, the pool checks to see if the current time less the time when the connection was created has reached 克鲁吉. 如果是这样,它将关闭连接,而不是将其返回到池中。 A value of 0 means that connections are left open and no age check is performed.

0

testonreturn.

在返回池之前是否验证了对象的指示。 If set to true, the 验证Query. property must be set to a non-null string or no test is performed. For information on more efficient validation, see 验证Interval..

错误的

testonborr

指示是否在借用池之前验证对象。 如果对象无法验证,则从池中删除,尝试借用另一个。 If testonborr is set to true, the 验证Query. property must be set to a non-null string or no test is performed. For information on more efficient validation, see 验证Interval..

错误的

测试跳

指示对象是否通过空闲对象evictor验证。 如果对象无法验证,则从池中删除。 If 测试跳 is set to true, you must set the 验证Query. property to a non-null string or no test is performed. For information on more efficient validation, see 验证Interval..

错误的

验证Query.

用于验证此池中的连接的SQL查询。如果指定,此查询不必返回任何数据,它可以’t throw a SQLException. See testonreturn., testonborr and 测试跳. An example value is 选择 1 FROM DUAL.

空值

验证Interval.

为避免过量验证,仅在此频率上运行验证,以毫秒为单位。 如果连接到期验证,但先前已在此间隔内验证,则不会再次验证。 See testonreturn., testonborr and 测试跳.

30000

TimebetweenevictionRunsmillis.

在空闲连接验证/清除程序线程运行之间睡眠的毫秒数。 不应在1秒内设置此值。 它决定了我们多久检查闲置,废弃的连接以及我们验证空闲连接的频率。

5000

URL.

NOODB数据库的URL。 采用格式:“jdbc:com.nuodb://<hosts>/<database-name>?<params>" - for example jdbc:com.nuodb://localhost/test?schema=Hockey.

  • <hosts> 定义一个或多个用于请求与TES的连接的AP。 Hosts must be separated by the character defined by the URL-分隔符 property (by default, a comma).

  • NOODB连接URL. 想要查询更多的信息。

URL-分隔符

The delimiter used to separate the URLs of the APs in the value of the URL. property.

For example, using the default delimiter (a comma) a URL containing two hosts might be jdbc:com.nuodb://host1,host2/testdb.

host1和host2标识了位置 行政 processes.

,

例子

验证连接

以下代码显示如何启用验证查询以检查每个连接,因为它从池中拍摄(借用)。 Note the comment /* My App Name */ in the query, this allows validation queries from different clients to be identified when logging or viewing System tables.

Properties p = new Properties();
p.setProperty(DataSource.PROP_URL, "jdbc:com.nuodb://localhost/test");
p.setProperty(DataSource.PROP_USERNAME, user);
p.setProperty(DataSource.PROP_PASSWORD, password);
p.setProperty(DataSource.PROP_TEST_ON_BORROW, "true");
p.setProperty(DataSource.PROP_VALIDATION_QUERY, "SELECT 1 /* My App Name */ FROM DUAL");
DataSource ds = new DataSource(p);
con = ds.getConnection();
....
验证连接减少了客户端接收到不再可用的TE的连接的可能性。 However it does 不是 保证连接有效。 Your code should always catch SQLTransientException and retry by getting a new connection to a different TE.
验证的价格是每个连接的额外查询。您必须决定此开销是否值得付费。

与JNDI合作

The following code shows how to use a DataSource from within an application server via a JNDI lookup.

DataSource ds = (DataSource)initContext.lookup("jdbc/nuoDB");

try (Connection con = ds.getConnection()) { ... use connection ... }

定义JNDI资源 for more details.