在Spring Transactions中,您使用TransactionStatus.setRollbackOnly()
。
您在这里遇到的问题是您正在使用@Transactional
交易标定边界。这具有非侵入性的好处,但是这也意味着,如果您要手动与事务上下文进行交互,则不能这样做。
如果要严格控制交易状态,则必须使用程序化交易,而不是声明性注释。这意味着使用Spring的TransactionTemplate,或直接使用其PlatformTransactionManager。请参阅Spring参考手册的9.6节。
使用TransactionTemplate
,您提供一个实现的回调对象TransactionCallback
,并且此回调中的代码可以访问这些TransactionStatus
对象。
它不如@Transactional
,但您可以更精确地控制自己的发送状态。