首页 > 解决方案 > 使用 Thorntail / Wildfly Swarm 配置 db2 数据源

问题描述

有没有人设法用 Thorntail / Wildfly Swarm 配置 db2 数据源?

据我了解:一旦我提取数据源部分,应该根据文档自动检测 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>

项目默认值.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"

标签: db2wildfly-swarmthorntail

解决方案


您在 JDBC 驱动程序自动检测代码中发现了一个错误。驱动程序(可能)被自动检测到,但配置错误。具体来说,这行代码将 XA 数据源类名称设置为com.ibm.db2.jdbc.DB2XADataSource,但它并不存在。(这实际上是您的错误消息所说的,但我也通过查看 JDBC 驱动程序 JAR 来确认它。)正确的类名是com.ibm.db2.jcc.DB2XADataSource. 我提交了THORN-2398并提交了带有修复的 PR。

我不确定是否有简单的解决方法,因为 JDBC 驱动程序自动检测是在应用所有配置后执行的。也许下面的黑客可能会奏效。像这样定义一个新的 JDBC 驱动程序project-defaults.yml

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 驱动程序自动检测,直到问题得到解决。


推荐阅读