注:本文章只是记录开发过程中遇到的问题,并无用作其他利益使用,参考的文章已在后文标注,如有侵权问题,请联系删除
今天开发过程中遇到了多次Could not retrieve transaction read-only status from server的报错问题,解决完一次另一个接口又出现此次情况,我遇到的场景是多个接口在同一个数据库的不同表中同步数据,先说一下最后的解决方案:
修改数据库wait_timeout = 86400,修改方式如下:
show global variables like '%timeout%';
SET GLOBAL wait_timeout=86400;
mysql数据库中默认的wait_timeout=8小时,应该是8*60*60,我们自己使用的数据库设置的是10,修改wait_timeout后此问题已经解决。
当然也查询到了一些其他的方案
其他方案:
1.@Transactional事务开启后处理其他业务占用大量时间,后访问数据报错,有兴趣的可以看一下参考文章2,起始如果wait_timeout足够大也没有问题
2.事务隔离级别导致:
-- 查询事务隔离级别
SHOW VARIABLES LIKE '%iso%';
SET GLOBAL tx_isolation='READ-COMMITTED';
<