当连接变坏时,有什么方法可以使JBoss连接池重新连接到Oracle?
时间:2020-03-06 14:40:36 来源:igfitidea点击:
我们的JBoss和Oracle位于不同的服务器上。连接似乎已断开,并导致JBoss出现问题。如果我们弄清楚了为什么首先断开连接的情况,那么如果连接断开,我如何让JBoss重新连接到Oracle?
解决方案
池上通常有一个配置选项,以使验证查询能够在借用时执行。如果验证查询成功执行,则池将返回该连接。如果查询未成功执行,则池将创建一个新连接。
JBoss Wiki记录了池的各种属性。
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
似乎应该可以解决问题。
尽管我们可以使用旧的"从双重选择1"技巧,但缺点是每次我们从池中借用连接时,它都会发出一个额外的查询。对于大批量,这是浪费的。
JBoss提供了一个特殊的连接验证器,该验证器应用于Oracle:
<valid-connection-checker-class-name> org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker </valid-connection-checker-class-name>
这将利用Oracle JDBC Connection类上的专有ping()方法,并使用驱动程序的基础网络代码来确定连接是否仍然有效。
但是,每次借用连接时都要运行此操作仍然很浪费,因此我们可能希望使用后台线程检查池中的连接并静默丢弃死掉的连接的工具。这样效率更高得多,但是这意味着,如果连接确实失效,则在后台线程运行其检查之前尝试使用它们的任何尝试都会失败。
有关如何配置背景检查的信息,请参见Wiki文档(查找background-validation-millis
)。