【发布时间】:2011-05-05 16:05:10
【问题描述】:
Hibernate 从底层连接池获得的数据库连接的责任是什么。它是否在使用连接之前测试连接是否已关闭?如果是这样,从池中获得另一个连接?
我在下面包含了错误和确认信息。关于我可以从哪里开始解决此问题的任何想法都会非常有帮助。以及有关我们正在使用的 SQL Server 驱动程序设置的任何建议。
来自 Catalina 日志:
2010 年 11 月 4 日 21:54:52.691 警告 org.apache.tomcat.jdbc.pool.ConnectionPool.abandon 连接已被放弃 PooledConnection[ConnectionID:8]:java.lang.Exception 在 org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:926) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:681) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:545) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:166) 在 org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:106)来自我们的应用程序日志:
2010-11-04 21:54:52,705 [tomcat-http--18] WARN util.JDBCExceptionReporter - SQL 错误:0,SQLState:08S01 2010-11-04 21:54:52,707 [tomcat-http--18] 错误 util.JDBCExceptionReporter - 套接字关闭 2010-11-04 21:54:52,708 [tomcat-http--18] 错误 transaction.JDBCTransaction - JDBC 回滚失败 java.sql.SQLException:连接已经关闭。 在 org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:112) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:94) 在 org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:71) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:94) 在 org.apache.tomcat.jdbc.pool.interceptor.ConnectionState.invoke(ConnectionState.java:132) 在 $Proxy38.rollback(未知来源) 在 org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:217) 在 org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:196) 在 org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:676) 在 org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:845) 在 org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822) 在 org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:412) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:111) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 在 org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)配置:
<Resource defaultAutoCommit="false" defaultReadOnly="false"
defaultTransactionIsolation="SERIALIZABLE"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
fairQueue="false" initialSize="10"
jdbcInterceptors="ConnectionState;StatementFinalizer"
jmxEnabled="true" logAbandoned="true" maxActive="100"
maxIdle="10" maxWait="30000"
minEvictableIdleTimeMillis="10000" minIdle="10"
name="com.ourcompany.ap.shoppingcart/datasource"
password="somePassword" removeAbandoned="true"
removeAbandonedTimeout="60" testOnBorrow="true"
testOnReturn="false" testWhileIdle="false"
timeBetweenEvictionRunsMillis="5000"
type="javax.sql.DataSource"
url="jdbc:sqlserver://approd\approd;databaseName=prod"
useEquals="false" username="AccessPointNet"
validationInterval="30000" validationQuery="SELECT 1"/>`
【问题讨论】:
标签: java hibernate jdbc connection-pooling