• Spring @Transactional 浅谈


      一般当我们在一个方法里面操作多个数据对象的可持久化操作时,我们通常这些操作能够成功一起事务提交成功。默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果

    执行失败则隐式的回滚事务。这时候可以用Spring的@Transactional 注解方法,它能够管理解决这方面问题,使事务统一的进行管理,即要么一起回滚成功,要么都失败。
      

      在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务,并且只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能。

      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}

      在Spring配置文件中加入如下:

    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    
    ....
    
    <!-- 事务管理器配置,单数据源事务 -->
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
    <!-- 使用annotation定义事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
    版权声明:如需转载,请注明!PS:如是转载随便,请忽略
  • 相关阅读:
    elasticsearch CriteriaQuery查询例子
    mysql转ElasticSearch的分析 及JAVA API 初探
    java利用HttpClient进行https接口调用
    JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序
    java爬虫入门
    AndroidStudio升到最新版本(3.1.2)之后
    怎样录制简单GIF动图
    android 集成友盟分享之后,想自定义分享面板的看过来
    Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果
    Android新特性之CardView的简单使用
  • 原文地址:https://www.cnblogs.com/zwdx/p/7509908.html
Copyright © 2020-2023  润新知