返回介绍

5.2 Spring Boot 事务的使用

发布于 2025-04-26 13:53:50 字数 2384 浏览 0 评论 0 收藏

5.2.1 Spring Boot 事务介绍

Spring Boot 开启事务很简单,只需要一个注解 @Transactional 就可以了,因为在 Spring Boot 中已经默认对 JPA、JDBC、Mybatis 开启了事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的 ORM 框架,比如 BeatlSQL,就需要自己配置相关的事物管理器。

Spring Boot 用于配置事务的类为 TransactionAutoConfiguration,此配置类依赖于 JtaAutoConfiguration 和 DataSourceTransactionManagerAutoConfiguration,具体查看源代码可知,而 DataSourceTransactionManagerAutoConfiguration 开启了对声明式事务的支持,所以在 Spring Boot 中,无须显示开启使用 @EnableTransactionManagement。

5.2.2 类级别事务

在第 3 章中,我们已经在 Spring Boot 中集成了 Spring Data JPA,同时开发了 AyUserRepository 类实现 JpaRepository 接口,JpaRepository 接口是不开启事务的,而 SimpleJapRepository 默认是开启事务的,所以我们需要手工给 AyUserRepository 添加事务。AyUserRepository 类中的方法是在服务层类 AyUserServiceImpl 中被使用,而事务一般都是加在服务层,因此我们可以在 AyUserServiceImpl 类上添加 @Transactional 注解来开启事务。AyUserServiceImpl 类开启事务的代码如下:

@Transactional 注解在类上,意味着此类的所有 public 方法都是开启事务的。

5.2.3 方法级别事务

@Transactional 除了可以注解在类上,还可以注解到方法上面。当注解在类上时,意味着此类的所有 public 方法都是开启事务的。如果类级别和方法级别同时使用了 @Transactional 注解,就使用方法级别注解覆盖类级别注解。我们可以给 AyUserServiceImpl 类中的 save() 方法添加事务,同时在 save 完成之后抛 NullPointException 异常,查看数据是否可以回滚,具体代码如下:

5.2.4 测试

5.2.1 节和 5.2.2 节的代码开发完成之后,我们在测试类 MySpringBootApplicationTests 中添加测试方法,具体代码如下:

     @Test
     public void testTransaction(){
         AyUser ayUser = new AyUser();
         ayUser.setId("3");
         ayUser.setName(" 阿华");
         ayUser.setPassword("123");
         ayUserService.save(ayUser);
     }

运行 testTransaction() 单元测试用例,当代码执行完成后,由于方法 save 保持数据时出现空指针,数据会回滚,因此在数据库中查询不到保存的数据。现在把 AyUserServiceImpl 类上的 @ Transactional 注解和 save 方法上的 @ Transactional 注解全部注释掉,再次执行 testTransaction() 单元测试用例,查询数据库,发现数据库多了一条数据,如图 5-1 所示。

图 5-1 将数据插入数据库

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。