wildfly注册mysql作为数据源

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

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

以下是文件

module.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>

standalone.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 problems with datasource

这是我启动时的错误日志

02:45:17,169 ERROR [org.jboss.as.controller.management-operation](控制器启动线程)JBAS014613:操作(“添加”)失败 - 地址:([(“subsystem”=>“datasources”), (“data-source”=>“proj”)]) - 失败描述:{“JBAS014771:缺少/不可用依赖的服务”=> [“jboss.data-source.java:jboss/datasources/proj缺失[jboss] .jdbc-driver.mysql]“,”jboss.driver-demander.java:jboss/datasources/proj缺失[jboss.jdbc-driver.mysql]“]} 02:45:17,175 ERROR [org.jboss.as . controller.management-operation](控制器启动线程)JBAS014613:操作(“添加”)失败 - 地址:([(“subsystem”=>“datasources”),(“data-source”=>“proj”)]) - 失败描述:{“JBAS014771:缺少/不可用依赖的服务”=> [“jboss.data-source.java:jboss/datasources/proj缺失[jboss.jdbc-driver.mysql]”,“jboss.driver- demander.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“]}}

回答(5)

2 years ago

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

  • 如果您登录到Web控制台并找到您尝试配置禁用的数据源,请将其删除 . standalone.xml和module.xml重置为原始 .

Steps for accessing web console

  • 配置新数据源:

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

  • 单击下一步并输入URL(我使用下面的内容)并单击“启用”,然后单击“测试”
    url:jdbc:mysql:// localhost / proj

  • 测试应该显示成功

  • 自动进行standalone.xml和module.xml的更改 .

  • 如果现在重新启动服务器,它应该没有任何错误地启动,您应该能够从Web项目访问数据库

2 years ago

我在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

[edit]

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

module.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>

2 years ago

两件事:我刚刚开始工作,并且驱动程序和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,最终修复了它 . 希望有所帮助!

2 years ago

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

2 years ago

three ways使用它可以简单地创建数据源到wildfly

  • 使用管理控制台

  • 手动添加到standalone.xml

  • 创建xml文件的数据源文件 .

转到 WildFly directory/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>