有没有办法在没有遇到异常的情况下强制进行事务回滚?
我有一种方法可以做很多事情。其中包括进行大量插入和更新。因此宣布…
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false)public int saveAll(){
//do stuff;
}
它的工作完全符合预期,我对此没有任何问题。但是在某些情况下,尽管没有异常,但我还是想强制回滚…目前,当我遇到合适的条件时,我正在强制异常,但这很丑陋,我不喜欢它。
我可以以某种方式积极地调用回滚吗?异常调用它…我在想也许我也可以。
回答:
在Spring Transactions中,您使用TransactionStatus.setRollbackOnly()
。
您在这里遇到的问题是您正在使用@Transactional
交易标定边界。这具有非侵入性的好处,但是这也意味着,如果您要手动与事务上下文进行交互,则不能这样做。
如果要严格控制交易状态,则必须使用程序化交易,而不是声明性注释。这意味着使用Spring的TransactionTemplate,或直接使用其PlatformTransactionManager。请参阅Spring参考手册的9.6节。
使用TransactionTemplate
,您提供一个实现的回调对象TransactionCallback
,并且此回调中的代码可以访问这些TransactionStatus
对象。
它不如@Transactional
,但您可以更精确地控制自己的发送状态。
以上是 有没有办法在没有遇到异常的情况下强制进行事务回滚? 的全部内容, 来源链接: utcz.com/qa/418138.html