2014-01-29 86 views
0

嗨,我們使用的是Tomcat 6和context.xml的是像下面Tomcat的數據庫連接泄漏

<Context> 
    <Resource defaultAutoCommit="false" defaultReadOnly="false" 
    driverClassName="oracle.jdbc.driver.OracleDriver" 
    fairQueue="false" initialSize="${DBPool.initialPoolSize}" 
    jdbcInterceptors="ConnectionState;StatementFinalizer" 
    jmxEnabled="true" logAbandoned="false" maxActive="${DBPool.maxPoolSize}" 
    maxIdle="30" maxWait="30000" 
    minEvictableIdleTimeMillis="5000" minIdle="${DBPool.minPoolSize}" 
    name="jdbc/BankDBPool" password="${DBPool.bankPassword}" 
    removeAbandoned="true" removeAbandonedTimeout="60" 
    testOnBorrow="false" testOnReturn="true" 
    testWhileIdle="false" timeBetweenEvictionRunsMillis="5000" 
    type="javax.sql.DataSource" 
    url="${DBPool.jdbcUrl}" 
    factory="uk.co.xxxx.encryption.dbcp.DecryptingBasicDataSourceFactory" 
    useEquals="false" username="${DBPool.bankUser}" validationInterval="30000" validationQuery="select 1 from dual" /> 
</Context> 

DBPool.maxPoolSize=400 
DBPool.minPoolSize=15 
DBPool.initialPoolSize=15 

的問題是我們要設置maxPoolSize非常高,因爲它是給連接不可用異常。 數據庫監視器工具正在顯示連接閒置,但似乎無法重用。這個應用程序的流量非常低。每天大約10000次點擊。

我們正試圖找出可能是什麼問題。

我所有的服務方法都標明 @Transactional(傳播= Propagation.REQUIRED,只讀= true或false)

DecryptingBasicDataSourceFactory只做返回數據源的工作。 我們使用spring和hibernate。

+0

你能發佈'連接不可用異常'的堆棧跟蹤嗎? –

回答

0

問題已解決。顯然該方法之一@Transactional失蹤。另一個變化是將休眠屬性中的批處理大小從100減少到20.但大多數情況下是增加了@Transactional來解決問題。