zoukankan      html  css  js  c++  java
  • Spring @Transactional

    在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。

    Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。

    如何改变默认规则:

            1、让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

            2、 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

            3、 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

    注意: 如果异常被try{}catch{},事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}


     

    @Transactional设置:

    propagation:事务传播性设置,Propagation枚举类型,事务默认为:Propagation.REQUIRED。Spring支持的事务传播属性包括7种:

        PROPAGATION_MANDATORY:方法必须在事务中执行,否则抛出异常。

        PROPAGATION_NESTED:使方法运行在嵌套事务中,否则和PROPAGATION_REQUIRED一样。

        PROPAGATION_NEVER :当前方法永远不在事务中运行,否则抛出异常。

        PROPAGATION_NOT_SUPPORTED:定义为当前事务不支持的方法,在该方法执行期间正在运行的事务会被暂停

        PROPAGATION_REQUIRED:当前的方法必须运行在事务中,如果没有事务就新建一个事务。新事务和方法一起开始,随着方法返回或者抛出异常时终止。

        PROPAGATION_REQUIRED_NEW :当前方法必须新建一个事务,如果当前的事务正在运行则暂停。

        PROPAGATION_SUPPORTS :规定当前方法支持当前事务,但是如果没有事务在运行就使用非事务方法执行。

    isolation:事务隔离性级别设置,Isolation枚举类型

        ISOLATION_DEFAULT :使用数据库默认的隔离级别

        ISOLATION_COMMITTED:允许其他事务已经提交的更新(防止脏读取)

        ISOLATION_READ_UNCOMMITTED:允许读取其他事务未提交的更新,会导致三个缺陷发生。执行速度最快

        ISOLATION_REPEATABLE_READ :除非事务自身更改了数据,否则事务多次读取的数据相同(防止脏数据,多次重复读取)

        ISOLATION_SERIALIZABLE:隔离级别最高,可以防止三个缺陷,但是速度最慢,影响性能。

     

    readOnly:读写性事务,只读性事务,布尔型

        对数据库的操作中,查询是使用最频繁的操作,每次执行查询时都要从数据库中重新读取数据,有时多次读取的数据都是相同的,这样的数据操作不仅浪费了系统资源,还影响了系统速度。对访问量大的程序来说,节省这部分资源可以大大提    升系统速度。

       将事务声明为只读的,那么数据库可以根据事务的特性优化事务的读取操作

    timeout:超时时间,单位秒

    事务可能因为某种原因很长时间没有反应,这期间可能锁定了数据库表,影响性能。设置超时时间,如果超过该时间,事务自动回滚。

    rollbackFor:一组异常类的实例,遇到时必须进行回滚

    rollbackForClassname:一组异常类的名字,遇到时必须进行回滚

    noRollbackFor:一组异常类的实例,遇到时必须不回滚

    noRollbackForClassname:一组异常类的名字,遇到时必须不回滚


    本文转自:http://blog.chinaunix.net/uid-20586655-id-3370000.html

  • 相关阅读:
    Spring boot 集成三种拦截方式
    Spring boot 异常处理配置
    Linux 启动、停止、重启tomcat工具(Shell脚本)
    Java 序列化对象工具类
    Spring boot 集成 Swagger
    Spring boot 项目导出可执行jar
    包扫描自定义注解类并实例化
    Zuul 网关搭建
    Hystrix + Hystrix Dashboard搭建(Spring Cloud 2.X)
    Feign + Hystrix 服务熔断和服务降级
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/4254126.html
Copyright © 2011-2022 走看看