美文网首页
Spring中@Transactional注解到底做了什么(一)

Spring中@Transactional注解到底做了什么(一)

作者: 夜流星_9775 | 来源:发表于2020-04-17 21:03 被阅读0次

首先我们直接先看@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: 支持当前事务,如果当前没有事务,则抛出异常。

关于不同的传播类型,spring会怎么处理?在后面我们会按照源码流程进行解析

相关文章

网友评论

      本文标题:Spring中@Transactional注解到底做了什么(一)

      本文链接:https://www.haomeiwen.com/subject/huyuvhtx.html