spring中的事务

出现问题的背景:

γ项目中在风险部分会有系统消息和邮件通知用户,这里涉及到事务,具体的流程为update数据之后,又要利用多线程根据assetsId获取当前资产的风险等级,并将相应的消息和邮件发送给用户。

产生原因:

外层大方法使用事务,在方法中又新起多线程进行消息和邮件等操作,这里多线程不在包括在事务之中,所以读取到的数据是update操作之前的数据。事务中开启多线程,新的线程的事务不受外面大事务的影响,新开的事务。

外层的方法所有的代码执行后(所有线程结束前),数据库的操作均会在一个事务中提交。但是多线程自己的操作会提交自己的事务,想要读取update之后的数据,由于外层的事务还未提交,所以读取了之前的旧数据,也从侧面说明了事务的正确性,事务未结束,数据未更新。

 

解决方案:

1.在多线程中进行休眠等待,等待几秒钟再进行数据的读取,这样大概率很读取update之后的数据,但是这并不是一定ok的,可能在sleep之后并没有完成update操作,此时读到的还是旧数据。

2.将多线程的操作放置到大事务之后再进行操作。多线程操作有需要大事务中的参数可以在大事务执行完成后返回,然后进行使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值