首页>>后端>>SpringBoot->SpringBoot中事务的配置与使用

SpringBoot中事务的配置与使用

时间:2023-11-29 本站 点击:0

1.开启事务

在Spring启动类中添加@EnableTransactionManagement可开启事务功能,默认已开启。

@SpringBootApplication@EnableTransactionManagement(显式开启事务,SpringBoot默认开启,可省略)publicclassEmosWxApiApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EmosWxApiApplication.class,args);}}

2.配置事务隔离等级(isolation参数)

2.1什么是事务隔离等级?有什么作用?

事务的隔离分为四个等级:RU(Read Uncommitted)、RC(Read Committed)、RR(Repeatable Read)、 SERIALIZABLE。

2.2怎么使用?

可以通过为业务层中的方法添加@Transactional注解以设置事务,注解中设置参数@Transactional(isolation = '')以设计隔离等级,参数由枚举类来表示

publicenumIsolation{DEFAULT(-1),//数据库中默认的隔离等级如MySQL中是RR,Oracle支持RC和Serial,默认为RCREAD_UNCOMMITTED(1),READ_COMMITTED(2),REPEATABLE_READ(4),SERIALIZABLE(8);}//例子@Transactional(isolation=Isolation.DEFAULT)

3.配置事务传播行为(propagation参数)

3.1什么是事务的传播行为?

事务传播行为: 指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。

3.2怎么设置传播参数?

传播参数的共分为7种

publicenumPropagation{REQUIRED(0),SUPPORTS(1),MANDATORY(2),REQUIRES_NEW(3),NOT_SUPPORTED(4),NEVER(5),NESTED(6);}

3.2.1 REQUIRED

执行被修饰的方法时,如果有事务上下文则加入该事物,如果没有则新开启一个事务。

3.2.2 SUPPORTS

执行被修饰的方法时,如果存在事务上下文,则加入该事务,如果没有则非事务地执行。

3.2.3 MANDATORY

执行被修饰的方法时,如果存在事务上下文,则加入该事务,如果没有则抛出异常 throw new IllegalTransactionStateException(“Transaction propagation ‘mandatory’ but no existing transaction found”);

3.2.4 REQUIRES_NEW

A执行被修饰的方法B时,先把调用者事务A挂起,再执行完被修饰的事务B后,再执行A,A事务是否成功提交不影响B事务。如果事务A发生回滚也不会影响到事务B的提交。

3.2.5 NOT_SUPPORTED

总是非事务地执行,并挂起任何存在的事务。

3.2.6 NEVER

总是非事务性地执行,如果存在一个活动的事务则抛出异常。

3.2.7 NESTED

也是嵌套模式,类似于REQUIRES_NEW,事务A调用B方法,则A挂起,先执行B,执行完了在恢复执行A,但是有一点不同,A如果执行失败回滚了会导致内层的B也回滚,但是B如果执行失败了并不会导致外层的A回滚。 如果调用B方法的A方法不存在事务,则B等于是REQUIRED。

4.配置只读(read-only)

@Transactional(isolation = Isolation.DEFAULT)

5.注意事项

待补充


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/SpringBoot/354.html