首页 > 解决方案 > SpringBoot项目中AS400 JDBC驱动问题

问题描述

我有一个连接到多个数据库的 Spring Boot 应用程序——Oracle、SQLServer、DB2、MySQL 等。

我通过 Gradle 依赖项导入必要的 JDBC 驱动程序:

implementation 'mysql:mysql-connector-java:8.0.22'
implementation ('com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8')
implementation group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: '19.9.0.0'
implementation group: 'com.ibm.db2', name: 'jcc', version: '11.5.6.0'

等等。他们都工作正常。

我现在需要连接到 AS400 服务器上的 DB2。有两个潜在的驱动程序:一个通过带有许可证的 DBConnect,或者开源 JT400 库。我正在使用后者。

我在同一个 build.gradle 文件中添加了这个依赖语句:

implementation group: 'net.sf.jt400', name: 'jt400', version: '10.6'

刷新依赖项会按预期下载库。我什至可以在启动应用程序时在类路径声明中看到它:

[...]681a/jjwt-0.9.1.jar:/home/paul/.gradle/caches/modules-2/files-2.1/net.sf.jt400/jt400/10.6/3f391a43632a93874dd3f544d7cb5a91b7a02380/jt400-10.6.jar:/home/paul/.gradle/caches/modules-2/files-2.1/...

但是,如果我尝试连接到 AS400 URL,我会在尝试连接时收到“未找到合适的驱动程序”。

我可以在尝试连接时调试应用程序,并尝试Class.forName("com.ibm.as400.access.AS400JDBCDriver")接收未找到的类异常。如果我打开引用的 jar 文件,则命名类按预期存在。

我在命令行上只用这个特定的 jar 构建了一个小型示例应用程序,它完美地执行(响应是预期的,因为我还没有指向实际的 AS400 服务器)。

paul@paul-adm-dev:~/$ java -cp .:/home/paul/.gradle/caches/modules-2/files-2.1/net.sf.jt400/jt400/10.6/3f391a43632a93874dd3f544d7cb5a91b7a02380/jt400-10.6.jar AS400ConnectionExample 
java.sql.SQLException: The application requester cannot establish the connection. (Connection refused (Connection refused))

我尝试将依赖项更改为编译和过时的运行时,但无济于事。我什至尝试在构成整个应用程序的其他子项目中导入,但总是得到相同的结果。

我难住了。什么可能导致这个单一的库没有被加载?

标签: javagradlejdbcibm-midrange

解决方案


解决了。叹。

尽管有自己的文档,但此特定驱动程序不会自动注册到 SQL 驱动程序管理器。

Class.forName("com.ibm.as400.access.AS400JDBCDriver")在负责创建连接的组件中添加静态初始化程序解决了这个问题。不知道为什么它在调试会话评估窗口中没有这样做,但至少现在我知道为什么这个驱动程序不像其他驱动程序那样“正常工作”。


推荐阅读