在Spring Boot中,通常推荐使用声明式事务管理(即使用@Transactional
注解)来自动处理事务的开启、提交和回滚。然而,在某些情况下,可能需要更细致地控制事务的边界,这时可能需要手动提交或回滚事务。
虽然Spring Boot本身不直接提供“手动”提交或回滚事务的API(因为Spring的PlatformTransactionManager
接口被设计为抽象层,隐藏了具体事务实现的细节),但可以通过操作底层资源(如TransactionTemplate
或TransactionStatus
)或使用编程式事务管理来间接实现这一点。
使用TransactionTemplate
TransactionTemplate
提供了一种模板方法,允许在回调中执行数据库操作,并且可以配置事务的属性(如隔离级别、传播行为等)。然而,它并不直接提供“手动”提交或回滚事务的API,因为它会在回调方法执行完毕后自动提交事务(如果没有抛出异常),或者在抛出异常时自动回滚事务。
下面是一个使用 TransactionTemplate
的示例:
首先,需要在 Spring 配置中定义 TransactionTemplate
bean(如果使用的是基于 Java 的配置,可以通过 @Bean
注解来定义):
@Configuration
@Enab