提问者:小点点

如何使用Hibernate配置连接池?


如何用Spring和Hibernate配置连接池?我的程序作为一个服务器来监听客户端的请求。如果客户端每小时发送一次请求,我的程序就能正常运行。但是如果客户端在00:00 am到07:00 am之间没有发送请求,我的程序就会捕捉到异常。

例外情况是:

org.hibernate.TransactionException: rollback failed at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:215) at CardCharging_MemCache.dao.FilterDao.getConnectorId(FilterDao.java:123) at CardCharging_MemCache.bussiness.CDVFilterRequestProcess.PCSL(CDVFilterRequestProcess.java:29) at CardCharging_MemCache.myhttp.myHttphandle.handle(myHttphandle.java:113) at com.sun.net.httpserver.Filter$Chain.doFilter(UnknownSource) at sun.net.httpserver.AuthFilter.doFilter(Unknown Source) at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(Unknown Source) at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) at sun.net.httpserver.ServerImpl$Exchange.run(Unknown Source) at sun.net.httpserver.ServerImpl$DefaultExecutor.execute(Unknown Source) at sun.net.httpserver.ServerImpl$Dispatcher.handle(Unknown Source) at sun.net.httpserver.ServerImpl$Dispatcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 由: org.hibernate.TransactionException: 无法在 org.hibernate.engine.transaction.internal.jdbc.Jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:209) ...13 更多 由: java.sql.SQLException: 关闭连接在 oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3694) 在 org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163) ...还有14个。

例外是关于连接的。有人帮我吗?拜托。Thaks!


共2个答案

匿名用户

如果连接空闲了一段时间(mysql默认为8小时),正常的数据库连接会失效,为了避免这种情况,您只需在连接池中设置这些属性——“validation query”、“validationInterval”、“testWhileIdle”、“testOnBorrow”。它们将在空闲时间激活您的连接,并总是从池中返回一个有效的连接。

匿名用户

在您的连接池中尝试使用这些属性,它们应该可以避免会话失效

<bean class="org.apache.tomcat.jdbc.pool.DataSource" id="dataSource" >
    <property name="driverClassName" value="${database.driverClassName}"/>
    <property name="url" value="${database.url}"/>
    <property name="username" value="${database.username}"/>
    <property name="password" value="${database.password}"/>

    <property name="minIdle" value="${database.minIdle}"/>
    <property name="initialSize" value="${database.initialPoolSize}"/>
    <property name="maxActive" value="${database.maxPoolSize}"/>
    <property name="maxIdle" value="${database.maxIdle}"/>
    <property name="testOnBorrow" value="true"/>
    <property name="validationQuery" value="SELECT 1"/>

    <property name="timeBetweenEvictionRunsMillis" value="30000"/>
    <property name="maxWait" value="10000"/>
    <property name="minEvictableIdleTimeMillis" value="30000"/>
    <property name="logAbandoned" value="true"/>
    <property name="testWhileIdle" value="true"/>
    <property name="validationInterval" value="300000"/>
    <property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport(threshold=10000)"/>

</bean>

在此阅读属性及其解释..