无法将 mysql 驱动程序与 Wildfly 9.0.2 一起使用,但它似乎已正确加载

Posted

技术标签:

【中文标题】无法将 mysql 驱动程序与 Wildfly 9.0.2 一起使用,但它似乎已正确加载【英文标题】:Can't use mysql driver with Wildfly 9.0.2 however It seems like it's loaded correctly 【发布时间】:2016-02-08 12:53:00 【问题描述】:

我正在尝试从 glassfish 切换到 wildfly,但我很难建立与 mysql db 的连接。我已将 .jar 和 module.xml 放在 /wildfly-9.0.2.Final/modules/system/layers/base/com/mysql/driver/main 下。

module.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql.driver">
  <resources>
  <resource-root path="mysql-connector-java-5.1.38-bin.jar"/>              
  </resources>
<dependencies>
  <module name="javax.api"/>
  <module name="javax.transaction.api"/>
</dependencies>
</module>

在standalone.xml 中我添加了一个条目:

<driver name="mysql" module="com.mysql.driver">
   <driver-class>com.mysql.jdbc.Driver</driver-class>
</driver>

有趣的部分来了,当我运行 ./standalnole.sh 时,完全没有错误。它说 mysql 驱动程序已启动,但在数据源下的管理界面上 - 检测到驱动程序我没有看到它,只是原来的 h2 驱动程序。

[0m13:22:59,551 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-3) WFLYJCA0018: Started Driver service with driver-name = mysql

你知道解决这个问题的方法吗?

【问题讨论】:

你是不是偶然截屏了?我看到它没有问题。 您是否按照 Wildfly 9 文档DataSource configuration 中提到的步骤进行操作? 您可能在管理界面中看不到它,因为它没有被使用。您是否尝试添加需要它的数据源? 【参考方案1】:

我使用命令行界面安装了 postgresql 驱动程序和模块。它最终出现在 .../wildfly-9.0.2.Final/modules/org/postgresql/main/ 。那是一个与您使用的不同的地方,但我不知道这是否是这里的问题。

您的 xml 对我来说看起来不错,但驱动程序 jar 和 module.xml 文件可能不在正确的位置。尝试使用cli安装它。以下是我安装驱动程序并为其创建数据源的方式:

module add --name=org.postgresql --resources=/Users/jonmartinsolaas/Downloads/postgresql-9.4.1207.jar --dependencies=javax.api,javax.transaction.api

添加模块时,jar 文件被复制到 wildfly。如果您需要多个罐子,请使用 : 作为列表分隔符。

    data-source add \
 --name=myDS \
 --driver-name=postgresql \
 --jndi-name=java:jboss/datasources/myDS \
 --connection-url="jdbc:postgresql://localhost/my-db" \
 --user-name=username \
 --password=secret \
 --use-ccm=false \
 --max-pool-size=25 \
 --blocking-timeout-wait-millis=5000 \
 --new-connection-sql="set datestyle = ISO, European;" \
 --check-valid-connection-sql="select 1" \
 --enabled=true

如果您需要 XA 数据源:

batch
   xa-data-source add \
    --name=mydsXA \
    --driver-name=postgresql \
    --jndi-name=java:jboss/datasources/mydsXA \
    --user-name=username \
    --password=secret \
    --recovery-username= username \
    --recovery-password = secret \
    --check-valid-connection-sql="select 1" \
    --use-ccm=false \
    --max-pool-size=25 \
    --blocking-timeout-wait-millis=5000 \
    --new-connection-sql="set datestyle = ISO, European;" \
    --enabled=true

    /subsystem=datasources/xa-data-source=paddaXA/xa-datasource-properties=ServerName:add(value=localhost)
    /subsystem=datasources/xa-data-source=paddaXA/xa-datasource-properties=PortNumber:add(value=5432)
    /subsystem=datasources/xa-data-source=paddaXA/xa-datasource-properties=DatabaseName:add(value=my-db)
run-batch

请注意,XA 定义作为批处理(某种事务)运行,因此您必须使用run-batch“提交”。

【讨论】:

并且:正如 jersey-city-ninja 所说,您尚未配置数据源。它是显示在 widlfly html 控制台中的数据源,而不是驱动程序。驱动可能已经安装好了,你现在只需要配置数据源。【参考方案2】:

我看到了几个问题。首先,您没有部署它。最简单的方法是将mysql-connector-java-&lt;version&gt;.jar 放入&lt;wildfly dir&gt;/standalone/deployments

其次,您没有在standalone.xml 中配置数据源。比如:

<subsystem xmlns="urn:jboss:domain:datasources:2.0">
    <datasources>
        <datasource jta="true" jndi-name="java:/MySQLDataSource" pool-name="MySQLDataSource" enabled="true" use-java-context="true" spy="false" use-ccm="true">
            <connection-url>jdbc:mysql://localhost:3306/mydatabase</connection-url>
            <driver-class>com.mysql.jdbc.Driver</driver-class>
            <driver>mysql-connector-java-<my version>.jar</driver>
            <pool>
                <allow-multiple-users>false</allow-multiple-users>
            </pool>
            <security>
                <user-name>xxx</user-name>
                <password>xxx</password>
            </security>
            <validation>
                <validate-on-match>false</validate-on-match>
                <background-validation>false</background-validation>
                <use-fast-fail>false</use-fast-fail>
            </validation>
            <timeout>
                <set-tx-query-timeout>false</set-tx-query-timeout>
                <blocking-timeout-millis>0</blocking-timeout-millis>
                <idle-timeout-minutes>0</idle-timeout-minutes>
                <query-timeout>0</query-timeout>
                <use-try-lock>0</use-try-lock>
                <allocation-retry-wait-millis>0</allocation-retry-wait-millis>
            </timeout>
            <statement>
                <track-statements>NOWARN</track-statements>
                <share-prepared-statements>false</share-prepared-statements>
            </statement>
        </datasource>
    </datasources>
</subsystem>

【讨论】:

以上是关于无法将 mysql 驱动程序与 Wildfly 9.0.2 一起使用,但它似乎已正确加载的主要内容,如果未能解决你的问题,请参考以下文章

带有 PostgreSQL 9.4 数据源的 WildFly 10 部署应用程序时出错

如何将 Wildfly 9 的默认 SessionManager 替换为所有 Web 应用程序的自定义实现?

Wildfly 9.x 无法对希腊附件文件名进行编码

是否可以在 Wildfly 中将数据源部署描述符与驱动程序模块一起使用?

添加新的数据源(mysql)wildfly

无法将 JSF + CDI 项目从 Tomcat 迁移到 Wildfly