java - 如何使用 Eclipse 的数据工具平台设置登录超时?

标签 java eclipse-dtp

我正在尝试为使用 Eclipse 数据工具平台的项目设置连接超时。目的是防止在数据库连接建立时间过长时出现等待。该项目支持多种数据库类型。

如果项目使用纯java.sql,我可以按如下方式设置超时:

final int TIMEOUT_SECONDS = 5;
DriverManager.setLoginTimeout(TIMEOUT_SECONDS);
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);

我尝试在 org.eclipse.datatools.connectivity 类中寻找类似的内容,例如 IConnectionProfile。到目前为止,我一直无法找到像DriverManager.setLoginTimeout这样的特定方法。

java.sql和org.eclipse.datatools.connectivity都支持添加属性来设置连接信息:

java.sql

Properties properties = new Properties();
properties.setProperty("user", connectionInfo.username);
properties.setProperty("password", connectionInfo.password);
String connectionTimeoutProperty = getConnectionTimeoutProperty();      // depends on the database vendor
String connectionTimeoutValue = getConnectionTimeoutPropertyValue();    // The value in seconds or milliseconds - also depends on the vendor
properties.setProperty(connectionTimeoutProperty, connectionTimeoutValue);
connection = DriverManager.getConnection(jdbcUrl, properties);

org.eclipse.database.connectivity

Properties properties = new Properties();
// Similar property setup as above.
ProfileManager.getInstance().createProfile(profileName, "Auto Generated", "org.eclipse.datatools.connectivity.db.generic.connectionProfile", properties, "", false);
return ProfileManager.getInstance().getProfileByName(profileName);

使用属性,我已经能够为大多数数据库设置超时。例如,Oracle 支持以毫秒表示的名为 oracle.net.CONNECT_TIMEOUT 的属性,而 Microsoft SQL Server 支持以秒表示的名为 loginTimeout 的属性。

我尚未找到 Sybase、Teradata 和 Netezza 的值。

问题1:是否有更简单的机制来设置数据工具平台的登录超时时间? 问题2:如果没有更好的解决方案,有没有办法为Sybase、Teradata和Netezza设置超时?我可以处理具有不同名称和值类型的属性。

最佳答案

经过一些研究,我发现创建 IConnectionProfile 实际上在幕后使用了 java.sql.DriverManager。如果我在创建连接配置文件之前设置 DriverManager.setLoginTimeout,则会识别超时。

但是,我还了解到 setLoginTimeout 并不能保证被所有驱动程序识别。例如,Informix、Netezza 和 PostgreSQL 没有使用 setLoginTimeout 设置的时间。对于我的用例,这些数据库不适用,所以我只使用了 setLoginTimeout。

虽然我没有将它用于我的解决方案,但可以使用属性来设置登录超时(请参阅原始帖子)。但是,属性名称和值类型(秒或毫秒)取决于驱动程序。

以下是我测试的各个数据库的结果。

以下是我使用具有低值(2 秒)的 setLoginTimeout 和保证超时的 URL 进行的测试的结果:

  • DB2 UDB - 有效
  • DB2 zOS - 有效
  • HIVE - 有效
  • INFORMIX - 不起作用 - 使用自己的超时(20 秒以上)
  • NETEZZA - 不起作用 - 使用自己的超时(20 秒以上)
  • ORACLE - 可以运行(大约慢 2-3 秒)
  • POSTGRES - 不起作用 - 使用自己的超时 10+ 秒
  • SQL_SERVER - 有效
  • SYBASE - 有效
  • TERADATA - 有效

以下是使用属性的测试结果(属性名称和值类型在括号中):

  • DB2 UDB(loginTimeout,秒)- 有效
  • DB2 zOS(登录超时,秒)- 有效
  • HIVE(登录超时,秒)- 有效
  • INFORMIX(INFORMIXCONTIME,秒)- 有效
  • ORACLE(oracle.net.CONNECT_TIMEOUT,毫秒)- 有效(大约慢 2-3 秒)
  • POSTGRES - 未找到属性
  • NETEZZA(loginTimeout,秒) - 如果属性位于 URL 中而不是单独的属性中,则有效。
  • SQL_SERVER(loginTimeout,秒)- 有效
  • SYBASE - 未找到属性
  • TERADATA - 未找到属性

关于java - 如何使用 Eclipse 的数据工具平台设置登录超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759566/

相关文章:

java - 以编程方式加载不同的 .class 文件运行 JUnit 测试

java - 使用JDBC访问远程MySQL数据库时出现com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

javascript - JSON : The request sent by the client was syntactically incorrect

java - 为软件分发创建多平台 CD

java - JFileChooser 类

mysql - Eclipse DTP 仍然不处理分隔符语句

java - Eclipse DTP 新驱动定义

mysql - 如何使用 Data Source Explorer 从 Eclipse 连接 MySql