spring事物控制导致数据库锁问题

郏高阳 发布于 2017/10/26 21:37
阅读 1K+
收藏 0

项目中一部分使用mybatis一部分直接使用数据库链接执行的sql操作数据库的,事物控制使用的是spring事物管理,在以前不做事物控制是OK的,链接直接关闭,现在要加事物控制,在做批量数据时间会出现锁表情况。具体配置如下:

这是XML中的配置,其中DBServer是要直接执行sql的操作类

具体代码如下:其实这里代码是有问题的,这里获取的数据库链接和mybatis获取得到的数据库链接肯定不是一个,这样事物应该控制时就有问题。只是小弟技术有限不知道该如何是好。

现在出现如下逻辑会锁表:中间标红字描述的操作的都是一张表。先执行删除,再执行插入,再执行关联数据。结果该表出现了锁表,请各路大神指点解决方案。

加载中
0
红薯
红薯

是不是数据库操作的时间太长啊?

红薯
红薯
回复 @郏高阳 : 有些更新操作,如果执行要很久,就要锁很久的表
郏高阳
郏高阳
时间长点不会导致锁表的吧,长也不可能超过5个小时吧,因为锁表日志我查过,开始时间是凌晨
0
BlueStragglers
BlueStragglers

那为什么不能都使用mybatis?

郏高阳
郏高阳
因为这是动态拼接sql的,查询条件展示,字段列都是配置出来的,用mybatis不太可能,改动太大
0
StopTWorld
StopTWorld

是不是要控制事务的传播属性啊,插入操作要等待这个删除操作完成,再进行。

郏高阳
郏高阳
回复 @StopTWorld : 这也是不会出问题,但是如果我插入出异常了,这时我要回滚,没法回滚之前的删除 肯定不行的
StopTWorld
StopTWorld
不说是同步异步哈,我觉得是不是应该删除操作,和插入操作 事务分隔开来,删除完了之后事务提交,然后再进行插入,保证不会有锁的问题。 ---当然我猜测。。
郏高阳
郏高阳
不应该把,我没写什么异步执行,先删除再插入,我没有删除完成肯定是不会执行插入的吧,代码是同步进行的
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部