zoukankan      html  css  js  c++  java
  • 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 {};
    }
  • 相关阅读:
    Qt QChart 中 QValueAxis 和 QCategoryAxis 区别
    Qt QChart 绘制面积图 QAreaSeries
    Qt QChart 设置线条样式 虚线
    Qt 读取csv文件并且绘制折线图
    Qt comboBox控件的三种基本用法
    Qt QStringList 的学习笔记
    OpenYurt 联手 eKuiper,解决 IoT 场景下边缘流数据处理难题
    如何避免 Go 命令行执行产生“孤儿”进程?
    阿里巴巴代码平台架构的演进之路
    云原生演进趋势下传统数据库升级实践
  • 原文地址:https://www.cnblogs.com/yangji0202/p/14262370.html
Copyright © 2011-2022 走看看