如何使用Hibernate配置连接池?

时间:2014-02-21 03:11:38

标签: java hibernate maven c3p0 dhcp

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

例外是:

  

org.hibernate.TransactionException:回滚失败       at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:215)       在CardCharging_MemCache.dao.FilterDao.getConnectorId(FilterDao.java:123)       在CardCharging_MemCache.bussiness.CDVFilterRequestProcess.PCSL(CDVFilterRequestProcess.java:29)       在CardCharging_MemCache.myhttp.myHttphandle.handle(myHttphandle.java:113)       at com.sun.net.httpserver.Filter $ Chain.doFilter(Unknown Source)       在sun.net.httpserver.AuthFilter.doFilter(未知来源)       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)       在java.lang.Thread.run(未知来源)   引起:org.hibernate.TransactionException:无法回滚JDBC连接       在org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167)       at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:209)       ......还有13个   引起:java.sql.SQLException:关闭连接       at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3694)       在org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163)       ......还有14个。

例外是关于连接。 任何人帮助我。 PLZ。 Thaks!

2 个答案:

答案 0 :(得分:0)

正常数据库连接无效,如果连接空闲一段时间[默认为8小时],为了避免这种情况,您只需在连接池中设置这些属性 - “validationQuery”,“validationInterval”,“testWhileIdle”,“ testOnBorrow”。它们将在空闲时间内保持连接,并始终从池中返回有效连接。

答案 1 :(得分:0)

在连接池中尝试使用此属性,它们应避免会话失效

<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>

了解属性及其解释here..