springboot事务注解@Transactional

有时候需要在程序中执行一系列数据库dml操作,但是我们又希望该一系列dml操作要么全部成功,要么遇到异常回滚。这里就可以使用@Transactional注解;

Transactional注解可以在类和方法上使用,当执行数据库dml语句时,遇到失败回滚事务。

笔记已经上传到有道云笔记,有需要可以直接下载,下载地址:  

http://note.youdao.com/noteshare?id=3a4432decb6dddc1172b91d49bc1f0e4&sub=CD3535E7CA734EDD8435D1620C63573E

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
    /*
     * 指定使用那个事务管理器
     */
    @AliasFor("transactionManager")
    String value() default "";

    @AliasFor("value")
    String transactionManager() default "";

    /*
     * 传播行为
     * TransactionDefinition.PROPAGATION_MANDATORY
     * 支持当前事务;如果不存在当前事务,则抛出一个异常。
     * <p>
     * TransactionDefinition.PROPAGATION_NESTED
     * 如果存在当前事务,则在一个嵌套的事务中执行。        
     * <p>
     * TransactionDefinition.PROPAGATION_NEVER
     * 不支持当前事务;如果存在当前事务,则抛出一个异常。
     * <p>
     * TransactionDefinition.PROPAGATION_NOT_SUPPORTED
     * 不支持当前事务;而总是执行非事务性。
     * <p>
     * TransactionDefinition.PROPAGATION_REQUIRED
     * 支持当前事务;如果不存在事务,则创建一个新的事务。
     * <p>
     * TransactionDefinition.PROPAGATION_REQUIRES_NEW
     * 创建一个新事务,如果存在一个事务,则把当前事务挂起。
     * <p>
     * TransactionDefinition.PROPAGATION_SUPPORTS
     * 支持当前事务;如果不存在,则执行非事务性。
     * <p>
     * TransactionDefinition.TIMEOUT_DEFAULT
     * 使用默认超时的底层事务系统,或者如果不支持超时则没有
     */
    Propagation propagation() default Propagation.REQUIRED;

    /*
     * 隔离级别
     * TransactionDefinition.ISOLATION_DEFAULT
     * 这是默认的隔离级别
     * <p>
     * TransactionDefinition.ISOLATION_READ_COMMITTED
     * 表明能够阻止误读;可以发生不可重复读和虚读
     * <p>
     * TransactionDefinition.ISOLATION_READ_UNCOMMITTED
     * 表明可以发生误读、不可重复读和虚读。
     * <p>
     * TransactionDefinition.ISOLATION_REPEATABLE_READ
     * 表明能够阻止误读和不可重复读;可以发生虚读。
     * TransactionDefinition.ISOLATION_SERIALIZABLE
     * 表明能够阻止误读、不可重复读和虚读。
     */
    Isolation isolation() default Isolation.DEFAULT;

    /*
     * 超时时间
     */
    int timeout() default -1;

    /*
     * 是否只读
     */
    boolean readOnly() default false;

    /*
     * 指定那些异常回滚事务
     */
    Class<? extends Throwable>[] rollbackFor() default {};

    String[] rollbackForClassName() default {};

   /*
    * 指定那些发生那些异常不需要回滚事务
    */
    Class<? extends Throwable>[] noRollbackFor() default {};

    String[] noRollbackForClassName() default {};
}

 

posted on 2021-01-11 15:30  神奇的光头强  阅读(520)  评论(0编辑  收藏  举报

导航