我在第一次访问DB时得到“JDBC事务失败”。我发现一个问题是我的MySQL空闲了10到12个小时。所以也许10个小时后,当我要打在登录时得到异常。
我的配置是
<bean id="salesOptSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.connection.isolation">2</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.max_size">20</prop>
<prop key="hibernate.c3p0.timeout">300</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.idle_test_period">3000</prop>
</props>
</property>
<property name="packagesToScan" value="com.perennialsys.salesoptimization.vo" />
</bean>
字符串
我该如何解决这个问题?
我从谷歌上发现idle_test_period
不应该超过timeout
。是这个原因吗?
1条答案
按热度按时间xqkwcwgp1#
数据库服务器可能会在一段时间后关闭其端的连接-导致应用程序中的一些错误,因为它会尝试在服务器端不再可用的连接上发送查询。
为了避免这种情况,您可以让池定期检查连接的有效性。这就是idle_test_period的作用。
timeout是连接池将从池中删除连接的时间跨度,因为该连接有一段时间未检出(使用),并且池中包含的连接数超过c3pO.min_size。
请记住,hibernate.c3p0.idle_test_period值必须不超过hibernate.c3p0.timeout的值。否则,C3 P0将永远不会检测到已关闭的连接。
谢了Rajesh