3

我一直在尝试将mysql配置为wildfly中的数据源。我不确定我错过了什么,启动时出现错误。

我在文件夹中有 mysql-connector-java-5.0.8-bin.jar 和 module.xml:“/wildfly-8.1.0.Final/modules/system/layers/base/com/mysql/main”

以下是文件

模块.xml

    <module xmlns="urn:jboss:module:1.1" 
        name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-5.0.8.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

独立的.xml

  <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
    <driver>h2</driver>
    <security>
      <user-name>sa</user-name>
      <password>sa</password>
    </security>
  </datasource>
  <datasource jta="true" jndi-name="java:jboss/datasources/proj" pool-name="proj" enabled="true" use-java-context="true" use-ccm="true">
    <connection-url>jdbc:mysql://localhost:3306</connection-url>
    <driver>mysql</driver>
    <security>
      <user-name>root</user-name>
      <password>admin123</password>
    </security>
    <statement>
      <prepared-statement-cache-size>32</prepared-statement-cache-size>
      <share-prepared-statements>true</share-prepared-statements>
    </statement>
  </datasource>
  <drivers>
    <driver name="mysql" module="com.mysql">
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>
    <driver name="h2" module="com.h2database.h2">
      <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>

我已经在 Eclipse 中使用独立程序测试了 jdbc 连接性并且它有效

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class ConnectSql {
    public static void main(String []args){
        String userName = "root";
        String pass = "admin123";
        String url = "jdbc:mysql://localhost/";
        String driver ="com.mysql.jdbc.Driver";
        String db = "proj";

        try{
            //registering the driver.
            Class.forName(driver);
            Connection con = DriverManager.getConnection(url+db,userName,pass);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select f_name from t_users");
            while(rs.next()){
                System.out.println("name :"+rs.getString(1));
            }


        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch(ClassNotFoundException cnf){
            cnf.printStackTrace();
        }
    }
}

参考下面的链接,修改了module.xml

Wildfly 8.0.0 mysql 数据源问题

这是我在启动时得到的错误日志

) ]) - 故障描述:{“JBAS014771:缺少/不可用依赖项的服务”=> [“jboss.data-source.java:jboss/datasources/proj 丢失 [jboss.jdbc-driver.mysql]”,“jboss .driver-demander.java:jboss/datasources/proj is missing [jboss.jdbc-driver.mysql]" ], "JBAS014879: 由于一个或多个间接依赖不可用,一个或多个服务无法启动。" => { "无法启动的服务:" => [ "jboss.data-source.reference-factory.proj", "jboss.naming.context.java.jboss.datasources.proj" ], "可能的服务是原因:" => ["jboss.jdbc-driver.mysql"] } } ], "JBAS014879: 由于一个或多个间接依赖不可用,一个或多个服务无法启动。" => { "无法启动的服务:" => [ "jboss.data-source.reference-factory.proj", "jboss.naming.context.java.jboss.datasources.proj" ], "可能的服务是原因:" => ["jboss.jdbc-driver.mysql"] } } ], "JBAS014879: 由于一个或多个间接依赖不可用,一个或多个服务无法启动。" => { "无法启动的服务:" => [ "jboss.data-source.reference-factory.proj", "jboss.naming.context.java.jboss.datasources.proj" ], "可能的服务是原因:" => ["jboss.jdbc-driver.mysql"] } }

4

5 回答 5

5

为了解决 Wildfly 上的 mysql 数据源配置问题,我使用管理控制台添加数据源并对其进行测试。

  1. 如果您登录到 Web 控制台并找到您尝试配置禁用的数据源,则将其删除。Standalone.xml 和 module.xml 被重置为原始文件。

    访问 Web 控制台的步骤

  2. 配置一个新的数据源:

    名称:mysql
    JNDI:java:jboss/datasources/proj

  3. 单击下一步并输入 url(我使用下面的)并单击启用,然后单击测试
    url:jdbc:mysql://localhost/proj

  4. 测试应该显示成功

  5. 对standalone.xml 和module.xml 的更改是自动进行的。

  6. 如果您现在重新启动服务器,它应该会在没有任何错误的情况下启动,并且您应该能够从您的 Web 项目访问数据库

于 2014-08-08T04:33:02.257 回答
2

我在wildfly上有mysql驱动程序的工作配置。

       <datasources>
            // ...
            <drivers>
                // ...
                <driver name="mysql" module="com.mysql.jdbc">
                    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    <driver-class>com.mysql.jdbc.Driver</driver-class>
                    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                </driver>
            </drivers>
        </datasources>

细微的差别似乎是“驱动程序类”标签的存在。

我希望它会有所帮助。

(将 mysql 驱动程序部署为部署也可以,这是推荐的方式。https://docs.jboss.org/author/display/WFLY8/DataSource+configuration

[编辑]

我在 wildfly/modules/com/mysql/jdbc/main/ 下有 mysql 模块。我刚才注意到您的模块路径与模块名称不对应。而且我还没有找到任何文档,但我认为你不应该弄乱模块/系统目录。

模块.xml

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql.jdbc">    
    <resources>
        <resource-root path="mysql-connector-java-5.1.31-bin.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
于 2014-08-04T23:43:05.263 回答
2

两件事:我刚刚开始工作,并且驱动程序和 xml 位于 $JBOSS_HOME/modules/com/mysql/jdbc/main - 我对此也很陌生,所以我不确定这是否重要。另一件事:我不知道这是否只是一个错字,但如果它只是复制和粘贴,看起来你的 JAR 名称不正确

<resource-root path="mysql-connector-java-5.0.8.jar"/>

什么时候应该

<resource-root path="mysql-connector-java-5.0.8-bin.jar"/>

我忘记了我的 .jar,最终修复了它。希望有帮助!

于 2014-10-01T16:23:23.217 回答
0

当您下载 mysql 连接器 zip 并将 zip 作为部署上传时,可能会发生这种情况。但正确的方法是解压你的下载并指向包含的 jar。

于 2016-07-22T20:10:45.797 回答
0

您可以通过三种方式简单地将数据源创建到 Wildfly

  1. 使用管理控制台
  2. 手动添加到standalone.xml
  3. 创建数据源文件,即 xml 文件。

转到WildFly 目录/standalone/deployments 创建具有以下内容的数据源 xml 的最简单方法

<datasources xmlns="http://www.jboss.org/ironjacamar/schema">
      <datasource jndi-name="APP_DS" pool-name="APP_DS" enabled="true" use-ccm="false">
        <connection-url>jdbc:mysql://localhost:3306/DB_NAME</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <driver>mysql</driver>

        <!-- sql to call when connection is created -->
        <new-connection-sql>SELECT 1</new-connection-sql>

        <pool>
            <min-pool-size>5</min-pool-size>
            <max-pool-size>50</max-pool-size>
        </pool>

        <security>
          <user-name>username</user-name>
          <password>password</password>
        </security>

        <!-- sql to call on an existing pooled connection when it is obtained from pool -->
        <validation>
        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
        </validation>

        <timeout>
        <blocking-timeout-millis>300000</blocking-timeout-millis>
        <idle-timeout-minutes>5</idle-timeout-minutes>
        </timeout>
        <statement>
        <track-statements>true</track-statements>
        </statement>      
      </datasource>
    </datasources>
于 2016-12-20T06:50:09.833 回答