2014-01-29 60 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来解决问题。