首页 理论教育 Java服务端研发-事务处理方法

Java服务端研发-事务处理方法

时间:2023-11-22 理论教育 版权反馈
【摘要】:Spring Boot项目事务配置步骤:1)注解依赖需要的注解为@EnableTransactionManagement和@Transactional,它们来自spring-tx-4.3.14.RELEASE.jar包,该包在配置MyBatis依赖时,通过起步依赖mybatis-spring-boot-starter已自动引入。2)业务类添加@Transactional注解@Transactional注解如果加在类上,则该类所有的方法都会被事务管理,如果加在方法上,则仅对该方法进行事务管理。表10-2 事务属性3)开启事务其实目前的事务已经是默认开启的,但是为了标记此服务中包含事务处理,可以在工程的启动类中添加注解@EnableTransactionManagement。

Java服务端研发-事务处理方法

本节演示的例子基于Spring Boot整合MyBatis,MyBatis整合进Spring Boot工程的方法已经在前面章节有详细的讲解,不再赘述。按照之前的方法新建一个工程MysqlExample。

Spring Boot项目事务配置步骤:

1)注解依赖

需要的注解为@EnableTransactionManagement和@Transactional,它们来自spring-tx-4.3.14.RELEASE.jar包,该包在配置MyBatis依赖时,通过起步依赖mybatis-spring-boot-starter已自动引入。

2)业务类添加@Transactional注解

@Transactional注解如果加在类上,则该类所有的方法都会被事务管理,如果加在方法上,则仅对该方法进行事务管理。一般都是加在方法上,因为只有涉及增、删、改才会需要事务。

在工程中,添加业务逻辑处理类ProductServiceImpl,此类中包含addProduct方法,用于添加商品,在此方法上添加事务注解,并指定REQUIRED事务传播行为,事务隔离级别为底层数据库的默认隔离级别,事务超时时间为30s,针对Exception进行回滚:

978-7-111-61011-3-Part03-6.jpg

上面配置@Transactional注解时使用了相关属性,属性含义见表10-2。

10-2 事务属性

978-7-111-61011-3-Part03-7.jpg(www.xing528.com)

3)开启事务

其实目前的事务已经是默认开启的,但是为了标记此服务中包含事务处理,可以在工程的启动类中添加注解@EnableTransactionManagement。

通过上面的三步,即完成了事务的配置。那么配置事务与未配置事务有什么区别呢?这里编写了两个测试方法进行验证。即在ProductServiceImpl类中添加两个方法,其执行内容一致,不同的地方在于方法modifyProductsByTransaction()添加了@Transactional注解,而方法modifyProducts()未添加,在方法体里面通过“int i=4/0;”语句来抛出异常。

978-7-111-61011-3-Part03-8.jpg

添加测试类ProductMapperTest,分别执行两个方法。

978-7-111-61011-3-Part03-9.jpg

978-7-111-61011-3-Part03-10.jpg

执行两个测试方法时,均抛出了异常:

java.ang.ArithmeticException:/by zero

但是方法modifyProducts()的第一条数据仍然被持久化到数据库中。而添加了@Transactional的方法modifyProductsByTransaction()执行后,两条记录都没有被持久化到数据库中。可见@Transactional作用可以保证事务的原子性。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈