在日常开发中常常会有这样的场景,在一段业务代码的最后需要发送MQ消息,但是需要事务提交后再执行发送,否则如果MQ消息消费的很快,去库中查询对应的业务数据,因为事务未提交而查询不到,导致代码报错。本文主要探讨应对这样的场景的一种方案。
写法:
1 |
|
这段代码很简单,但是却有一个坑,afterCommit方法中不要写新的操作数据库代码,尤其不要写更新数据库的操作,因为事务不会提交,原因可以参考afterCommit方法的文档。如果确实需要在这里面执行事务提交操作,需要开启一个新的事务,写法如下:
1 |
|