我发现在我们反弹(停止并重新启动)数据库(postgresql 8.3)后,使用hibernate(3.2.6)的应用程序无法重新获取连接,而是出现SocketException错误,错误信息为“broken pipe”。
我相信我们已经配置使用内置连接池。
如何使hibernate在不重启应用程序的情况下重新获取连接?
谢谢!
我相信我们已经配置使用内置连接池。
如何使hibernate在不重启应用程序的情况下重新获取连接?
谢谢!
我的建议是您切换到其他连接池实现。如果您切换到C3P0(它与Hibernate一起提供),连接测试可以按照此处解释的说明进行配置。如果您使用Apache DBCP,则可以设置validationQuery,如此处解释所述。
如果您在jboss中使用hibernate,可以在deploy目录下的* -ds.xml文件中进行配置,以在从连接池中获取连接之前执行某些查询:
例如:
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
Connection getConnectionFromPool() {
try {
//get connection from pool
//execute some simple uery that should always work
} catch (SocketException s) {
//close broken connection and get a new one
}
return connection;
}