java - 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))
我尝试将依赖项更改为编译和过时的运行时,但无济于事。我什至尝试在构成整个应用程序的其他子项目中导入,但总是得到相同的结果。
我难住了。什么可能导致这个单一的库没有被加载?
解决方案
解决了。叹。
尽管有自己的文档,但此特定驱动程序不会自动注册到 SQL 驱动程序管理器。
Class.forName("com.ibm.as400.access.AS400JDBCDriver")
在负责创建连接的组件中添加静态初始化程序解决了这个问题。不知道为什么它在调试会话评估窗口中没有这样做,但至少现在我知道为什么这个驱动程序不像其他驱动程序那样“正常工作”。
推荐阅读
- sql-server - 上个月的 SQL Server 查询和指定日期之前的查询
- sql - 预期类型“数组”。找到 'Illuminate\Support\Collection' Laravel 查询生成器
- javascript - ESLint:8.0.0 无法加载插件'@typescript-eslint'
- python - TypeError:“方法”对象在 Python 中不可下标
- javascript - 无法开玩笑地模拟模块
- c# - 如何使用 playerprefs 在统一 3d 中保存我的游戏货币
- javascript - 在使用 Firestore onSnapshot 时,是否有一种访问模式可以支持这种多对多对多关系,并且可以由安全规则处理?
- c# - 更新对象属性在可枚举中不起作用
- git - SourceTree、gitlab 和 TeamCity 之间的持续身份验证问题(涉及 gitLFS)
- c# - 使用 C# SDK for IIS,有没有办法查询 Web 服务并检测它有哪些方法?