首先在springBootApplication开启事物管理
@SpringBootApplication
@xxxx
@xxxxx
@EnableTransactionManagement //开启事物管理
public class App {
public static void main(String args[]){
SpringApplication.run(App.class, args);
}
}在Spring Boot中,当我们使用了
spring-boot-starter-jdbc
或者
spring-boot-starter-data-jpa依赖的时候,框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外 配置就可以用@Transactional注解进行事务的使用。
@Transactional使用在类上面是,对应类中的所有方法都会开启事物管理。 在方法上使用时,只会对当前方法开启事物管理
以上试用于一些基本的,简单的业务。当我们业务复杂,使用的不同的数据源。需要指定不同的事务管理的时候(多数据源的配置详见:
《Spring Boot多数据源配置与使用》),只需要通过value属性配置事务管理器的名即可@Transactional(value="transactionalManagerPrimary")
除了指定不同的事务管理器之后,还能对事务进行隔离级别和传播行为的控制,下面分别详细解释:
隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。
我们可以看 org.springframework.transaction.annotation.Isolation 枚举类中定义了五个表示隔离级别的值:
public enum Isolation {
DEFAULT(-1),
READ_UNCOMMITTED(1),
READ_COMMITTED(2),
REPEATABLE_READ(4),
SERIALIZABLE(8);
}所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
我们可以看 org.springframework.transaction.annotation.Propagation 枚举类中定义了6个表示传播行为的枚举值:
public enum Propagation {
REQUIRED(0),
SUPPORTS(1),
MANDATORY(2),
REQUIRES_NEW(3),
NOT_SUPPORTED(4),
NEVER(5),
NESTED(6);
}