在Widlfly上设置SQL Server数据源的正确方法是什么?
我需要从我在Wildfly上运行的Web应用程序访问SQL Server数据库。
我已按如下方式设置数据源:
<datasource jta="false" jndi-name="java:jboss/db" pool-name="db" enabled="true" use-ccm="false">
<connection-url>jdbc:jtds:sqlserver://IP_ADDRESS;instance=SQLEXPRESS;DatabaseName=DB</connection-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<driver>jtds-1.3.1.jar</driver>
</datasource>
这很好用,除了重新启动SQL Server时,连接丢失,数据源无法重新创建。所以我得到的错误如下:
状态无效,Connection对象已关闭。
This post建议添加一些验证,所以我这样做了:
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
但这并没有解决问题,我仍然不时得到相同的“连接关闭”错误。
This other post建议使用DataSource而不是Driver,所以我已将其添加到我的配置中:
<datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</datasource-class>
但是当我测试连接时,我得到一个例外:
java.sql.SQLException:尚未设置serverName属性 at net.sourceforge.jtds.jdbcx.JtdsDataSource.getConnection(JtdsDataSource.java:150)
答案 0 :(得分:3)
迁移到WFLY后我遇到了同样的问题,并通过添加属性解决了这个问题。
这就是我的完整* -ds.xml的样子:
<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema">
<datasource jndi-name="java:/xxxDS" pool-name="MSSQL">
<connection-url>
jdbc:sqlserver://localhost:1433;database=dbname;charset=UTF-8
</connection-url>
<driver>sqljdbc</driver>
<security>
<user-name>xxx</user-name>
<password>xxx</password>
</security>
<pool>
<!-- default is 0 -->
<min-pool-size>10</min-pool-size>
<!-- default is 20 -->
<max-pool-size>50</max-pool-size>
</pool>
<validation>
<valid-connection-checker
class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker" />
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation-millis>10000</background-validation-millis>
</validation>
</datasource>
对我来说,有效连接检查是不够的,但通过在选择1中添加后台验证,它正在工作。
我们已经转移到直接从MSFT使用jdbc驱动程序:
<driver name="sqljdbc" module="mc.jdbc.sqljdbc">
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
这也可能有所不同,但我们已经用JBoss AS7和jdts驱动程序设置了很长时间。