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