CannotCreatelransactionException: Could not open JDBc Connection for transaction

我的mysql遇到过这个问题,我记得高斯数据库也有这个问题,写此记录:

org. springframework. transaction. CannotCreatelransactionException: Could not open JDBc Connection for transaction; 


c3p0连接池的testConnectionOnCheckout属性,类似于autoReconnect属性可自动保持数据库的连接,在获取连接时先检查连接是否有效(即检查Connection是否被mysql数据库关闭了),如果连接无效就重新建立一个新的连接。

1、下载相关JAR包;

在Maven Repository中下载c3p0相关jar包,将c3p0-0.9.2.1.jar 拷贝至项目中。

2、在数据库配置文件中,添加c3p0连接池配置,配置如下:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
      destroy-method="close">
    <property name="driverClass" value="${jdbc.driverClass}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="initialPoolSize" value="25"/>
    <property name="minPoolSize" value="25"/>
    <property name="maxPoolSize" value="50"/>
    <property name="acquireIncrement" value="5"/>
    <property name="testConnectionOnCheckout" value="true"/>
</bean>

上面配置中最重要的就是hibernate.c3p0.testConnectionOnCheckout这个属性,它保证每次取出连接时都会检查该连接是否被关闭,如果被关闭,则重新建立连接。

简单两步就搞定了mysql超时自动重连的问题了。

${jdbc.driverClass}等数据库连接具体内容我是写到properties文件里的,你也可以直接写上去

3、测试验证

①修改mysql默认超时time,超时参数设置的比较小(设置为1min)

SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
SHOW GLOBAL VARIABLES LIKE '%timeout%';
SET GLOBAL wait_timeout=60;
SET GLOBAL interactive_timeout=60;

我的是mysql,默认等待时间是28800秒吧,搞完记得改回去,有查询语句自己看

②启动web工程,登录系统,然后等待1分钟以上,再次操作系统检查是否会报mysql连接错误

经过验证,发现c3p0连接池配置能有效解决mysql超时重连问题。

参阅文档:

hibernate配置参数详解:

https://blog.csdn.net/javahuangfang/article/details/8269314

c3p0常用配置参数:

https://blog.csdn.net/zhanghanlun/article/details/80918422
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/Huozhiwu_11/article/details/106550566

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值