JTDS和JBOSS JDBC连接池问题,有解决方案吗?也许是定制的ValidConnectionChecker?
我正面临一个奇怪的生产问题。环境包括:JTDS和JBOSS JDBC连接池问题,有解决方案吗?也许是定制的ValidConnectionChecker?,jdbc,jboss,jtds,Jdbc,Jboss,Jtds,我正面临一个奇怪的生产问题。环境包括: JBoss4.0.2 SQL Server 2005 驾驶员JTDS 1.2.5 不时会发生以下情况 SQL命令无法使用执行 java.sql.SQLException: I/O Error: Read timed out (如果一天发生两次左右,我可以接受) 但从那一刻起,连接似乎被浪费了,而池没有意识到它,因为我不断地收到 java.sql.SQLException: Invalid state, the Connection object
- JBoss4.0.2
- SQL Server 2005
- 驾驶员JTDS 1.2.5
java.sql.SQLException: I/O Error: Read timed out
(如果一天发生两次左右,我可以接受)
但从那一刻起,连接似乎被浪费了,而池没有意识到它,因为我不断地收到
java.sql.SQLException: Invalid state, the Connection object is closed.
从那一刻起。唯一有帮助的是重新启动JBOSS。尽管我有
<check-valid-connection-sql>select getdate()</check-valid-connection-sql>
选择getdate()
在我的数据源定义中设置
<local-tx-datasource>
<jndi-name>MyDS</jndi-name>
<connection-url>jdbc:jtds:sqlserver://192.168.35.235:1433/MyDb;user=user1;password=pwd;appName=MyApp;loginTimeout=15;socketTimeout=120</connection-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<user-name>user1</user-name>
<password>pwd</password>
<min-pool-size>10</min-pool-size>
<max-pool-size>25</max-pool-size>
<blocking-timeout-millis>60000</blocking-timeout-millis>
<idle-timeout-minutes>1</idle-timeout-minutes>
<check-valid-connection-sql>select getdate()</check-valid-connection-sql>
</local-tx-datasource>
我想知道是否可以使用自定义ValidConnectionChecker,它可以重建连接本身,也可以显式抛出异常来修复此问题。也许任何人都有其他的建议
这是我完整的DS定义
<local-tx-datasource>
<jndi-name>MyDS</jndi-name>
<connection-url>jdbc:jtds:sqlserver://192.168.35.235:1433/MyDb;user=user1;password=pwd;appName=MyApp;loginTimeout=15;socketTimeout=120</connection-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<user-name>user1</user-name>
<password>pwd</password>
<min-pool-size>10</min-pool-size>
<max-pool-size>25</max-pool-size>
<blocking-timeout-millis>60000</blocking-timeout-millis>
<idle-timeout-minutes>1</idle-timeout-minutes>
<check-valid-connection-sql>select getdate()</check-valid-connection-sql>
</local-tx-datasource>
MyDS
jdbc:jtds:sqlserver://192.168.35.235:1433/MyDb;user=user1;密码=pwd;appName=MyApp;loginTimeout=15;socketTimeout=120
net.sourceforge.jtds.jdbc.Driver
用户1
pwd
10
25
60000
1.
选择getdate()
谢谢你的帮助
关于连接。在JTDS中未实现isValid()。
我发现,即使捕获异常并强制完全重新启动连接也不起作用。尝试将驱动程序类行更改为 net.sourceforge.jtds.jdbcx.JtdsDataSource。 net.sourceforge.jtds.jdbc.Driver未实现javax.sql.ConnectionPoolDataSource接口。 资料来源:
解决方案可能太晚了,但我仍然坚持使用jtds驱动程序。希望这能节省你半小时的工作时间 修复方法是为Apache dbcp2连接池实现指定validationQuery。 对于jtds/sql server 我指定了spring配置,如下所示:
<bean id="sqlServerDS" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="defaultReadOnly" value="true" />
<property name="validationQuery" value="select 1" />
</bean>
这可能吗?在JBoss中,你真的能用数据源代替驱动程序吗?