购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.2 Spring Boot事务使用

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 类级别事务

在第2章中,我们已经在Spring Boot中集成了Spring Data JPA,同时开发了AyUserRepository类实现JpaRepository接口,JpaRepository接口是不开启事务的,而SimpleJpaRepository默认是开启事务的,所以我们需要手工给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节代码开发完成之后,我们在测试类DemoApplicationTests中添加测试方法,具体代码如下:

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

图5-1 数据插入到数据库 SJRMwfqPGD2GLCIdMVqPNpxteVuWok0/jyqYjJcRYSzyAnhhWFChVlwxYMzxdHkJ

点击中间区域
呼出菜单
上一章
目录
下一章
×