使用 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 没有优雅地退出

使用 KEYCLOAK 确保 thorntail 服务

如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?

Docker(Spring Boot 或 Thorntail)和 Keycloak

Thorntail project-defaults.yml的技术参数

Quarkus如何在application.properties中设置环境变量