我有一个spring引导服务类方法,该方法使用@Trans显式注释,其中我需要将事务提交到MYSQL DB,然后执行最后一个代码块,即将实体推送到Redis队列。下面是我的代码片段:
@Transactional
public void save(Entity t) {
try {
entityRepository.save(t);
} catch(Exception ex) {
log.error("Error while executing transaction",e);
} finally {
//code to push to redis
}
}我怀疑事务是否会被提交,最后的块是否会被执行?或者,只有在finally块完成之后,@ transaction才会完成所有事务。如果是后者,如何确保事务在提交到Redis之前已提交?
请指点。
注意: entityRepository是一个扩展CrudRepository的类。
发布于 2021-03-08 06:26:45
只有在最后一个块之后才会执行事务。
对于提到的用例,请参阅:Creating a post commit when using transaction in Spring
将TransactionSynchronization注册到afterCommit或afterCompletion。
https://stackoverflow.com/questions/66524749
复制相似问题