2010-09-13 175 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