springboot(19)编程式事务
1 |
|
org.springframework.transaction.support.TransactionTemplate.execute()
方法有一个 TransactionCallback
类型的参数,该接口中定义了一个 doInTransaction()
方法,通常我们以匿名内部类的方式实现 TransactionCallback
接口,并在其 doInTransaction()
方法中书写业务逻辑代码。这里可以使用默认的事务提交和回滚规则,这样在业务代码中就不需要显式调用任何事务管理的 API。doInTransaction()
方法有一个TransactionStatus
类型的参数,我们可以在方法的任何位置调用该参数的setRollbackOnly()
方法将事务标识为回滚的,以执行事务回滚。
根据默认规则,如果在执行回调方法的过程中抛出了未检查异常,或者显式调用了TransacationStatus.setRollbackOnly()
方法,则回滚事务;如果事务执行完成或者抛出了checked类型的异常,则提交事务。
TransactionCallback
接口有一个子接口 TransactionCallbackWithoutResult
,该接口中定义了一个 doInTransactionWithoutResult()
方法,TransactionCallbackWithoutResult
接口主要用于事务过程中不需要返回值的情况。当然,对于不需要返回值的情况,我们仍然可以使用 TransactionCallback
接口,并在方法中返回任意值即可。
注:
TransactionTemplate
不可以在@Transactional
注解的作用范围内使用,否则会导致异常:Transaction rolled back because it has been marked as rollback-only。