zoukankan      html  css  js  c++  java
  • spring 事务

    大纲:

    1. 声明式事务
    2. 编程式事务

    一、声明式事务

    纳入spring事务管理只需要在方法或这类上@Transactional 就行了。

    1. 加在方法上表示这个方法纳入管理,加载类上表示整个类的方法纳入管理。方法和类上都声明则优先级顺序为方法>实现类>接口。
    2. 多数据源时@Transactional("DataSourceTransactionManager")注解中填写spring配置DataSourceTransactionManager的名称。
    3. @Transactional还可以指定隔离级别,超时等。
    4. 同类中yy方法直接调用xx,事务不生效。
    5. xx方法需要public权限。
    6. 抛出RuntimeException时生效,业务代码1没有编译时异常,可以生效,业务代码2有编译时异常,需要手动catch,手动回滚。
    @Transactional
    public void xx(){
      业务1;
    try { 业务2; } catch (Exception e) { //回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }

    private void yy(){
      //事务无效
      xx();
    }

    二、编程式事务

    PlatformTransactionManager

    1. DefaultTransactionDefinition指定超时,隔离级别等。
    2. 多数据源需要Qualifierspring指定配置DataSourceTransactionManager的名称。
    3. 声明式的不能做到每次分开提交回滚、控制粒度不如编程式的。例如在一个循环中,编程式的可以每次循环都新开事务提交或回滚。
        @Autowired
        @Qualifier("transactionManagerName")
        PlatformTransactionManager transactionManager;
    
        public void testx() {
            TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
            try {
                //业务
                transactionManager.commit(status);
            } catch (Exception e) {
                transactionManager.rollback(status);
                e.printStackTrace();
            }
        }
  • 相关阅读:
    打印二叉树和为某一值的路径
    顺时针打印数组
    算术表达式
    堆内存与栈内存详解
    【腾讯校招在线考试附加题】将一个10进制数转换为四位定长的36进制数
    反转链表
    记录github出错及解决方案
    centos7操作防火墙
    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]解决方法
    MyBatis联表查询——别名方式
  • 原文地址:https://www.cnblogs.com/liuboyuan/p/8575994.html
Copyright © 2011-2022 走看看