简体   繁体   English

如何使用Hibernate配置连接池?

[英]How to configure a connection pool with Hibernate?

How to configure connection pooling with Spring and Hibernate? 如何使用Spring和Hibernate配置连接池? My program as a server to listen request from Client. 我的程序作为服务器来侦听来自客户端的请求。 If client send request every hours, my program run normally. 如果客户端每小时发送一次请求,则我的程序正常运行。 But if client don't send request from 00:00 am to 07:00 am, my program catch exception. 但是如果客户从上午00:00到上午07:00不发送请求,我的程序将捕获异常。

The exception is: 例外是:

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(Unknown Source) 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 org.hibernate.TransactionException:回滚在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),位于com.sun.net.httpserver.Filter $ Chain.doFilter(未知源),位于sun.net.httpserver.AuthFilter com.sun.net.httpserver.Filter $ Chain.doFilter(未知源)在sun.net.httpserver.ServerImpl $ Exchange $ LinkHandler.handle处com.sun.net.httpserver(未知源) .Filter $ Chain.doFilter(未知来源)在sun.net.httpserver.ServerImpl $ Exchange.run(未知来源)在sun.net.httpserver.ServerImpl $ DefaultExecutor.execute(未知来源)在sun.net.httpserver.ServerImpl位于sun.net.httpserver.ServerImpl上的$ Dispatcher.handle(未知源)在以下位置的$ Dispatcher.handle(未知源) java.lang.Thread.run(Unknown Source) Caused by: org.hibernate.TransactionException: unable to rollback against JDBC connection at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:209) ... 13 more Caused by: java.sql.SQLException: Closed Connection at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3694) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163) ... 14 more. java.lang.Thread.run(未知源)由:org.hibernate.TransactionException:无法在org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167)上的JDBC连接上回滚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个。

The exception is about connection. 关于连接的例外。 Anyone help me. 有人帮我 Plz. l Thaks! 解冻!

Normal DB connection invalidate if connection is idle for certain time [8 hours in mysql default], To avoid this you just have to set these properties in your connection pool - "validationQuery", "validationInterval", "testWhileIdle", "testOnBorrow". 如果连接空闲了一段时间(在mysql默认情况下为8个小时),则正常的数据库连接将失效,为避免这种情况,您只需在连接池中设置以下属性-“ validationQuery”,“ validationInterval”,“ testWhileIdle”,“ testOnBorrow”。 They will live your connection during idle time and always return a valid connection from pool. 他们将在空闲时间建立您的连接,并始终从池中返回有效的连接。

Try with this properties in your connection pool, them should avoid session invalidation 在连接池中尝试使用此属性,它们应避免会话无效

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

Read about the properties and their explanation here.. 在此处阅读有关属性及其解释的信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM