在 Spring Boot 中操作事务有两种形式:编程式事务或申明式事务,接下来咱们一起来看二者的具体实现。
1. 编程式事务
在 Spring Boot 中实现编程式事务又有两种实现办法:
- 应用 TransactionTemplate 对象实现编程式事务;
- 应用更加底层的 TransactionManager 对象实现编程式事务。
它们的具体实现代码如下。
1.1 TransactionTemplate 应用
要应用 TransactionTemplate 对象须要先将 TransactionTemplate 注入到以后类中,而后再应用它提供的 execute 办法执行事务并返回相应的执行后果,如果程序在执行途中呈现了异样,那么就能够应用代码手动回滚事务,具体实现代码如下:
1.2 TransactionManager 应用
TransactionManager 实现编程式事务绝对麻烦一点,它须要应用两个对象:TransactionManager 的子类,加上 TransactionDefinition 事务定义对象,再通过调用 TransactionManager 的 getTransaction 获取并开启事务,而后调用 TransactionManager 提供的 commit 办法提交事务,或应用它的另一个办法 rollback 回滚事务,它的具体实现代码如下:
从上述代码能够看出, 应用编程式事务更加灵便,但写法比拟麻烦 。
2. 申明式事务
申明式事务的实现比较简单, 只须要在办法上或类上增加 @Transactional 注解即可,当退出了 @Transactional 注解就能够实现在办法执行前,主动开启事务;在办法胜利执行完,主动提交事务;如果办法在执行期间,呈现了异样,那么它会主动回滚事务。
它的具体应用如下:
当然,@Transactional 反对很多参数的设置,它的参数设置列表如下:
参数的设置办法如下:
总结
本文咱们介绍了两种事务的实现形式:编程式事务或申明式事务。其中编程式事务又分为两种实现:应用 TransactionTemplate 对象或更加底层的 TransactionManager 对象别离实现编程式事务,它们的长处是灵活性更高,能够在任何代码片段上增加事务;而申明式事务的实现更加简略,只须要在类或办法上增加 @Transactional 注解即可实现事务的主动开启和提交(以及回滚)。
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java 面试真题解析
面试合集:https://gitee.com/mydb/interview