我正在运行Spring + hibernate 3 + c3p0。启动时,如果数据库关闭,则在大约10分钟后抛出异常。在那之前程序被阻止......我不包括spring xml,hibernate配置等,因为它是一个相当普遍的问题,如果存在解决方案,它必须是标准的直接方式。如果不是,我可以修剪关键代码和配置并将其粘贴到此处。有人知道吗?提前谢谢。


澄清:

我基本上需要知道在DriverManager.setLoginTimeout()函数周围是否存在c3p0或hibernate中的包装器,甚至是spring。或者是一个为我提供此功能的功能。包装器可以通过设置或其他东西。我只想在X秒内连接到数据源时出现异常,无论原因是什么(套接字,数据库,恶劣天气)。我想找到一个设置这个X的地方。更糟糕的是,Oracle驱动程序,我正在使用的驱动程序,没有实现setLoginTimeout()所以我不能直接使用它。我已经意识到没有办法解决它,而是手动生成我自己的计时器线程。有人可以验证上述情况吗?非常感谢。

有帮助吗?

解决方案

这很可能与Hibernate / Spring本身无关;数据库连接池负责处理连接。

  1. 您的C3P0设置是什么?
  2. 您使用的数据库/驱动程序是什么?是否有任何特定于驱动程序的设置导致驱动程序本身在报告错误之前等待/重试?
  3. 是否“数据库已关闭”意思是“完全失望”?或者这可能是由某种套接字超时引起的?
  4. 更新(根据下面的OP说明):

    oracle驱动程序不使用

    DriverManager.setLoginTimeout()。 OracleDataSource有自己的 loginTimeout设置

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top