面试突击:SpringBoot 中如何操作事务?

开发 架构
本文我们介绍了两种事务的实现方式:编程式事务或声明式事务。其中编程式事务又分为两种实现:使用 TransactionTemplate 对象或更加底层的 TransactionManager 对象分别实现编程式事务,它们的优点是灵活性更高,可以在任何代码片段上添加事务;而声明式事务的实现更加简单,只需要在类或方法上添加 @Transactional 注解即可实现事务的自动开启和提交(以及回滚)。

在 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 注解即可实现事务的自动开启和提交(以及回滚)。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-09-25 22:12:07

事务SpringBoot

2022-07-06 07:35:19

group byMySQL

2022-09-19 06:16:23

事务隔离级别Spring

2022-09-20 22:27:08

事务失效public 修饰

2022-02-28 07:01:22

线程中断interrupt

2022-06-29 11:01:05

MySQL事务隔离级别

2022-09-27 21:14:54

Spring事务传播机制

2022-09-14 19:50:22

事务场景流程

2022-04-13 14:43:05

JVM同步锁Monitor 监视

2022-10-09 20:52:19

事务隔离级别传播机制

2022-08-17 07:06:14

SpringBoot配置@Value

2022-09-07 07:05:25

跨域问题安全架构

2022-03-28 08:31:29

线程池定时任务

2022-07-11 07:10:48

HTTP协议类型

2022-04-11 07:40:45

synchroniz静态方法程序

2023-06-28 08:25:14

事务SQL语句

2022-04-06 07:50:28

线程安全代码

2022-05-05 07:38:32

volatilJava并发

2022-06-06 07:35:26

MySQLInnoDBMyISAM

2022-04-20 07:47:00

notify唤醒线程JVM
点赞
收藏

51CTO技术栈公众号