hibernate 第一次命中时获取jdbc事务失败

63lcw9qa  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(91)

我在第一次访问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。是这个原因吗?

xqkwcwgp

xqkwcwgp1#

数据库服务器可能会在一段时间后关闭其端的连接-导致应用程序中的一些错误,因为它会尝试在服务器端不再可用的连接上发送查询。
为了避免这种情况,您可以让池定期检查连接的有效性。这就是idle_test_period的作用。

timeout是连接池将从池中删除连接的时间跨度,因为该连接有一段时间未检出(使用),并且池中包含的连接数超过c3pO.min_size。

请记住,hibernate.c3p0.idle_test_period值必须不超过hibernate.c3p0.timeout的值。否则,C3 P0将永远不会检测到已关闭的连接。
谢了Rajesh

相关问题