首先我们直接先看@Transactional注解的代码,注解接口中的关键字也是平常在@Transactional注解使用时,按照需求可以设置的关键字
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
@AliasFor("transactionManager")
//AliasFor指的是value和transactionManager互为别名
String value() default "";
@AliasFor("value")
String transactionManager() default "";
//事务传播类型
Propagation propagation() default Propagation.REQUIRED;
//事务隔离级别
Isolation isolation() default Isolation.DEFAULT;
//事务的超时时间
int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
//事务只读
boolean readOnly() default false;
//事务回滚的异常类型
Class<? extends Throwable>[] rollbackFor() default {};
String[] rollbackForClassName() default {};
//事务不回滚的异常类型
Class<? extends Throwable>[] noRollbackFor() default {};
String[] noRollbackForClassName() default {};
}
在这里的重点关键字主要是传播类型和隔离级别
传播类型
传播类型主要有七种
(1)required :如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
(2) requires_new: 新建事务,如果当前存在事务,把当前事务挂起。
(3) Supports: 支持当前事务,如果当前没有事务,就以非事务方式执行。
(4) not_Supported: 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
(5) NEVER :以非事务方式执行,如果当前存在事务,则抛出异常。
(6) nested:嵌套事务。
(7) mandatory: 支持当前事务,如果当前没有事务,则抛出异常。