使用 Thorntail / Wildfly Swarm 配置 db2 数据源
Posted
技术标签:
【中文标题】使用 Thorntail / Wildfly Swarm 配置 db2 数据源【英文标题】:Configure a db2 datasource with Thorntail / Wildfly Swarm 【发布时间】:2019-05-02 07:20:11 【问题描述】:有没有人设法?
据我了解:一旦我提取数据源部分,db2 驱动程序就应该根据文档 (https://docs.thorntail.io/2.3.0.Final/#auto-detecting-jdbc-drivers_thorntail) 自动检测。 所以我唯一要做的就是在我的数据源中引用“ibmdb2”作为驱动程序名称,对吧?
pom.xml(使用 Thorntail 2.3.0.Final)
<dependency>
<groupId>io.thorntail</groupId>
<artifactId>datasources</artifactId>
</dependency>
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc_license_cu</artifactId>
<version>10.1</version>
</dependency>
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc4</artifactId>
<version>4.22.29</version>
</dependency>
project-defaus.yml
swarm:
context:
path: /
datasources:
data-sources:
MYDS:
driver-name: ibmdb2
connection-url: jdbc:db2://host:port/schema
user-name: user
password: password
目前我在启动时收到以下错误:
2019-05-02 09:07:52,747 INFO [org.wildfly.swarm.datasources] (main) THORN1003: Auto-detected JDBC driver for ibmdb2
2019-05-02 09:07:57,660 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 16) WFLYCTL0013: Operation ("add") failed - address: ([
("subsystem" => "datasources"),
("jdbc-driver" => "ibmdb2")
]) - failure description: "WFLYJCA0114: Failed to load datasource class: com.ibm.db2.jdbc.DB2XADataSource"
【问题讨论】:
【参考方案1】:您在 JDBC 驱动程序自动检测代码中发现了一个错误。驱动程序(可能)被自动检测到,但配置错误。具体来说,this line of code 将 XA 数据源类名称设置为 com.ibm.db2.jdbc.DB2XADataSource
,它不存在。 (这实际上是您的错误消息所说的,但我也通过查看 JDBC 驱动程序 JAR 确认了这一点。)正确的类名是 com.ibm.db2.jcc.DB2XADataSource
。我提交了THORN-2398 并提交了带有修复的 PR。
我不确定是否有简单的解决方法,因为 JDBC 驱动程序自动检测是在应用所有配置后执行的。也许下面的黑客可能会奏效。在project-defaults.yml
中定义一个新的 JDBC 驱动程序,如下所示:
thorntail:
datasources:
jdbc-drivers:
mydb2:
driver-module-name: com.ibm.db2jcc
driver-xa-datasource-class-name: com.ibm.db2.jcc.DB2XADataSource
但保持其他一切完好无损。这意味着将有 2 个用于 DB2 的 JDBC 驱动程序,一个是自动检测的(将创建 com.ibm.db2jcc
模块),而您创建的第二个将搭载第一个创建的基础设施。如果可行,只需将数据源中的driver-name: ibmdb2
更改为driver-name: mydb2
。
如果这不起作用,您现在必须停止 JDBC 驱动程序自动检测,直到问题得到解决。
【讨论】:
非常感谢!我创建了自己的 jdbc-driver 定义。这完美地工作。但是我仍然从自动检测中得到错误。有没有办法禁用 JDBC 驱动程序自动检测? 我认为关闭 JDBC 驱动程序自动检测是不可能的。如果您的依赖项中有 JDBC 驱动程序,它将被自动检测到。你可以从你的 Maven POM 中删除它,但是你必须为它创建自己的module.xml
等等。在docs.thorntail.io/2.4.0.Final/… 有 一些 文档以上是关于使用 Thorntail / Wildfly Swarm 配置 db2 数据源的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?
Docker(Spring Boot 或 Thorntail)和 Keycloak