java - MS SQL Server 的 JBoss AS 5 数据库连接池重新连接例程

标签 java sql-server jboss datasource connection-pooling

我想提出当 JBoss AS 5 到数据库的连接暂时丢失时重新连接到 MS SQL Server 的最佳方法。

对于 Oracle,我发现了这个问题:"Is there any way to have the JBoss connection pool reconnect to Oracle when connections go bad?"其中表示它使用 Oracle 特定的 ping 例程并利用 JBoss' Configuring Datasources Wiki 中描述的 valid-connection-checker-class-name 属性。 .

我想避免的是每次从池中提取连接时都运行另一个 SQL,这就是另一个属性 check-valid-connection-sql 的基本作用。

所以目前,我倾向于使用异常排序器类名的方法,但我不确定这是否是 MS SQL Server 的最佳方法。

希望听到您对此主题的建议。谢谢!

最佳答案

我不确定它是否会按照您描述的方式工作(透明地)。

有效的连接检查器(这可以是 *ds.xml 文件中的 sql 语句,也可以是执行提升操作的类)在从池中获取连接时调用,因为数据库可能在连接池中时将其关闭。如果连接不再有效, 它被关闭,并从数据库请求一个新的连接 - 这对应用程序来说是完全透明的,并且仅在连接从池中取出时才会发生(正如您所说)。然后您可以在您的应用程序中长期使用它。

异常排序器旨在向应用程序报告,例如ORA-0815 是 SQL 语句的无害或错误的返回代码。如果它是无害的,它基本上会被吞掉,而如果是坏的,它会作为异常报告给应用程序。

因此,如果您想使用异常排序器来查找池中的坏连接,您需要做好准备,基本上您触发的每个语句都可能会抛出陈旧连接异常,并且您需要关闭连接并尝试获取新连接。这意味着对您的代码进行适当的更改,您当然可以这样做。

我认为时不时地在数据库上触发一个廉价的 sql 语句来检查池中的连接是否仍然有效比“手动”执行所有这些检查要便宜得多。

顺便说一句:虽然有适用于所有数据库的通用连接检查器 sql,但某些数据库提供了另一种测试连接是否良好的方法; Oracle 为此有一个特殊的 ping 命令,该命令在您引用的特殊 OracleConnectionChecker 类中使用。因此,MS-SQL 可能有类似的东西,它比简单的 SQL 语句更便宜。

关于java - MS SQL Server 的 JBoss AS 5 数据库连接池重新连接例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5088447/

相关文章:

创建或更新行时出现 java.sql.SQLException

jboss - Wildfly : Jboss error on start-up

Java:从静态方法中获取继承类的类

java 对象不能从不同的包源进行转换

Java递归二分查找

java - 移动应用业务逻辑层策略

sql-server - FOR XML ... TYPE 比 FOR XML 慢多少?

sql-server - 从 SQL Azure 迁移到 SQL Server

spring-mvc - 通过编码错误的 WAR 部署的 Spring Boot 静态文件

java - 如何在Web应用程序中使用ejb