【问题标题】:JBoss - How to set default data source in multi-database environment?JBoss - 如何在多数据库环境中设置默认数据源?
【发布时间】:2019-11-14 04:16:33
【问题描述】:

我正在将我的项目从 JBoss EAP 6.4 迁移到 JBoss EAP 7.2。

所以我遇到了这种错误,

   15:45:50,571 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "my.war")]) - failure description: {
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.module.DefaultDataSource"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.naming.context.java.module.dummy.env.myDS is missing [jboss.naming.context.java.module..DefaultDataSource]"]
}

我知道发生此错误是因为 standalone.xml 中未定义默认数据源。在以前的 JBoss EAP 版本中,删除 DefaultDataSource 并没有给出这个问题。在这个版本中,定义 DefaultDataSource 是强制性的,即使这些应用程序不需要该默认数据源。

所以我尝试将默认数据源作为已经存在的数据源。在这种说法中:

<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:/jdbc/existing" /> 

这很好用。

现在我的问题是我们的环境有多个数据库及其各自的数据源。 所以我们不能将特定的数据源定义为默认值。因为这会干扰我们的应用程序正常流程。并且会产生重大问题。

我们希望应用程序仅使用其特定数据源,而不是默认数据源。

但是 JBoss EAP 7 强制我们指定默认数据源。

那么我们可以定义一个虚拟的默认数据源吗?还是有其他替代方法?

【问题讨论】:

  • 您确定没有收到错误,因为ee 子系统中定义的默认数据源在datasource 子系统中没有匹配项?我很难相信默认数据源在 7.2 中成为强制性的,而且我从经验中知道,在 7.0/7.1 中并非如此
  • 实际上它显示错误,因为我的数据源之一缺少依赖的默认数据源。我用实际错误编辑了我的问题
  • 我知道给默认数据源是来自这个链接access.redhat.com/solutions/2360921的授权
  • @Aaron 有什么办法可以解决这个问题吗?你能给我一些链接吗?
  • 查看分辨率部分:从eedefault-binding 中删除default-datasource,您就可以开始了。该部分不是很清楚,但它提供了两种替代解决方案:删除默认数据源或重新定义它

标签: java spring jakarta-ee jboss datasource


【解决方案1】:

同时适用于JBoss EAP 7.2Wildfly

修改standalone.xml这部分设置默认数据源

<?xml version="1.0" encoding="UTF-8"?>
<subsystem xmlns="urn:jboss:domain:datasources:3.0">
   <datasources>
      <datasource jta="true" jndi-name="java:jboss/datasources/default" pool-name="default" enabled="true" use-java-context="true" use-ccm="true" statistics-enabled="true">
         <connection-url>jdbc:mysql://localhost:3306/default?autoReconnect=true&amp;useSSL=false</connection-url>
         <driver>mysql</driver>
         <security>
            <user-name>user</user-name>
            <password>password</password>
         </security>
      </datasource>
      <drivers>
         <driver name="mysql" module="com.mysql">
            <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
         </driver>
      </drivers>
   </datasources>
</subsystem>

JBoss/Wildfly 会将其作为默认数据源。

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    standalone.xml 的默认绑定中存在默认数据源选项

    default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/jdbc/jndi-name" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/
    

    【讨论】:

    • 这应该是公认的答案。它帮助我在 EAP 7.2 中更改了默认数据源。
    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2017-02-18
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多