SQL Wildfly 中使用 JTDS 驱动程序的服务器连接
SQL Server connection in Wildfly using JTDS driver
在 Widlfly 上设置 SQL 服务器数据源的正确方法是什么?
我需要从我在 Wildfly 上运行的 Web 应用程序访问 SQL 服务器数据库。
我已经按如下方式设置了数据源:
<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 服务器重新启动时,连接丢失并且数据源无法重新创建连接外,这工作正常。所以我收到如下错误:
Invalid state, the Connection object is closed.
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>
但这并不能解决问题,我仍然时不时遇到相同的 "connection closed" 错误。
This other post 建议使用 DataSource 而不是 Driver,因此我已将其添加到我的配置中:
<datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</datasource-class>
但是当我测试连接时出现异常:
java.sql.SQLException: The serverName property has not been set.
at net.sourceforge.jtds.jdbcx.JtdsDataSource.getConnection(JtdsDataSource.java:150)
我在迁移到 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>
对我来说,valid-connection-checker 是不够的,但是通过添加带有 select 1 的后台验证,它可以正常工作。
我们已经转而使用直接来自 MSFT 的 jdbc 驱动程序:
<driver name="sqljdbc" module="mc.jdbc.sqljdbc">
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
这也可能有所不同,但是我们已经用 JBoss AS7 和 jdts 驱动程序设置了很长时间。
在 Widlfly 上设置 SQL 服务器数据源的正确方法是什么?
我需要从我在 Wildfly 上运行的 Web 应用程序访问 SQL 服务器数据库。
我已经按如下方式设置了数据源:
<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 服务器重新启动时,连接丢失并且数据源无法重新创建连接外,这工作正常。所以我收到如下错误:
Invalid state, the Connection object is closed.
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>
但这并不能解决问题,我仍然时不时遇到相同的 "connection closed" 错误。
This other post 建议使用 DataSource 而不是 Driver,因此我已将其添加到我的配置中:
<datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</datasource-class>
但是当我测试连接时出现异常:
java.sql.SQLException: The serverName property has not been set.
at net.sourceforge.jtds.jdbcx.JtdsDataSource.getConnection(JtdsDataSource.java:150)
我在迁移到 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>
对我来说,valid-connection-checker 是不够的,但是通过添加带有 select 1 的后台验证,它可以正常工作。
我们已经转而使用直接来自 MSFT 的 jdbc 驱动程序:
<driver name="sqljdbc" module="mc.jdbc.sqljdbc">
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
这也可能有所不同,但是我们已经用 JBoss AS7 和 jdts 驱动程序设置了很长时间。