2010-09-13 179 views
4

我们使用Spring框架(版本2.5)中的DriverManagerDataSource来连接到Oracle。但是,似乎这些连接没有定义任何超时 - 昨天,紧急数据库重新启动后,我们在数据库连接内部读取的套接字上挂起了一个线程。我如何设置超时时间,说10分钟,这样下次会引发异常?如何设置春季的超时时间DriverManagerDataSource

回答

4

我最终改变以下列方式Spring上下文豆:

<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" autowire="no"> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="connectionProperties"> 
     <props> 
      <prop key="oracle.net.READ_TIMEOUT">60000</prop> 
     </props> 
    </property> 
</bean> 

我不知道它是否有效。

+3

没有为我工作! – 2014-06-17 13:05:29

0

如果Oracle驱动程序实现支持超时属性,您可以通过getConnectionProperties().put(key, timeout)

通过它传递给底层实现我假设你意识到DriverManagerDataSource不是一个连接池?从文档:

注意:此类不是实际的连接池;它实际上并不是 池连接。它只是作为 简单替换成一个完整的 连接池,实现相同的 标准接口,但创建新的 连接在每个呼叫。 [..]如果您需要 Apache's Jakarta Commons DBCPC3P0需要“容器”外的“真实”连接池 。

您可能也有兴趣OCI Connection Pooling