spring-boot jdbc 到 db2 的连接获取读取超时

Posted

技术标签:

【中文标题】spring-boot jdbc 到 db2 的连接获取读取超时【英文标题】:spring-boot jdbc connection to db2 gets read timeouts 【发布时间】:2018-08-09 15:18:42 【问题描述】:

所以我是 db2 新手,很快就要在项目中使用它,为了做好准备,我使用了 db2express-c docker image。

我收到了 JT400 库,用于从我的应用程序连接到 docker 容器。

但是,在尝试连接到 db2 实例时,我不断收到读取超时。 我的 jdbc-url 看起来像这样 jdbc:as400://127.0.0.1:50000;database name=TRFM;naming=system;thread used=false;errors=full;toolbox trace=all;trace=true;

连接到 db2 实例后,jdbc 似乎发送了一些随机字节,但没有得到响应。 下面你会从跟踪中找到一些额外的信息: Thread[restartedMain,5,main] Thu Aug 9 16:47:47:837 CEST 2018 Sending exchange random seeds request... Thread[restartedMain,5,main] Thu Aug 9 16:47:47:838 CEST 2018 Data stream sent (connID=337871951) ... 00 00 00 1C 01 00 E0 04 00 00 00 00 00 00 00 00 00 08 70 01 00 00 01 65 1F 28 6D 7D Thread[restartedMain,5,main] Thu Aug 9 16:47:47:838 CEST 2018 Receiving exchange random seeds reply... Thread[restartedMain,5,main] Thu Aug 9 16:48:07:842 CEST 2018 Establishing connection failed: java.net.SocketTimeoutException: Read timed out

【问题讨论】:

您将 DB2 for i (IBM i & jt400) 的连接字符串与 DB2 for LUW 的连接字符串混合在一起。 jt400 用于连接到在 IBM i 上运行的 DB2。 db2jcc4.jar 用于连接到 DB2 LUW。您链接中的 Docker 映像使用 DB2 LUW。 【参考方案1】:

您不能使用 JT400 库与 Db2-for-Linux/Unix/Windows 服务器通信。 相反,该驱动程序用于与 Db2-for-i-Series 通信。

要使用 Db2 for Linux/Unix/Windows,请使用 Db2 for LUW 客户端之一,可从 http://www-01.ibm.com/support/docview.wss?uid=swg21363866 下载(需要 IBM 注册)。

docker 容器中的 Db2-express 服务器是 Db2 for LUW。请记住,当您使用 Db2 for LUW 时,您的 URL 必须遵循 Db2 for LUW 的 pattern,如 Db2 for LUW 知识中心中所述。

【讨论】:

感谢您的回答,就像我说的我刚刚发现了整个 DB2 生态系统,非常感谢您帮助我!

以上是关于spring-boot jdbc 到 db2 的连接获取读取超时的主要内容,如果未能解决你的问题,请参考以下文章

jsp用jdbc连接db2数据库的方法

使用 jdbc 运行 DB2 命令失败

无法创建到 Test Container for DB2 的 JDBC 连接

带有实例名称的 DB2 JDBC 连接 url

spring-boot:数据库中断后jdbc重新连接

在eclipse中通过jdbc连接DB2数据库