我们正在使用Spring框架(版本2.5)中的DriverManagerDataSource
来连接到Oracle。但是,似乎这些连接没有定义任何超时 - 昨天,在紧急数据库重启后,我们有一个线程挂在数据库连接内的套接字读取。如何设置超时,比如10分钟,以便下次引发异常?
答案 0 :(得分:4)
我最终以下列方式更改了Spring上下文中的bean:
<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>
我不知道它是否有效。
答案 1 :(得分:1)
Oracle有一个内置连接池:oracle.jdbc.pool.OracleDataSource
。我建议你直接使用它。 Oracle JDBC(10gR2,其他版本将类似)的参考位于http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/toc.htm。兴趣点:
答案 2 :(得分:0)
如果您的Oracle驱动程序实现支持超时属性,您可以通过getConnectionProperties().put(key, timeout)
我假设您意识到DriverManagerDataSource
不是连接池?来自文档:
注意:此类不是实际的连接池;实际上并没有 池连接。它只是用作 简单的替换为一个完整的 连接池,实现相同 标准接口,但创建新的 每次通话都有连接。 [..] 如果你 在外面需要一个“真正的”连接池 考虑到J2EE容器的问题 Apache's Jakarta Commons DBCP或 C3P0
您可能也对OCI Connection Pooling感兴趣?