Spring事务详解

作者: java面试收割机 | 来源:发表于2018-08-20 19:14 被阅读4次

spring 事务不起作用的几种情况:
1、spring MVC的spring-mvc.xml配置文件扫描了service 层,导致spring aop没有生成代理对象
解决方法:让 mvc 只扫描控制层

<!-- 启动自动扫描 -->
<context:component-scan base-package="com.bingo.controller"/> 

spring的配置文件扫描除控制层意外的包

<!-- 启动自动扫描 -->
<context:component-scan base-package="com.bingo"> 
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
</context:component-scan> 

2、入口的 SpringTransactionService的insert方法没有事务,但是SpringTransactionService的add方法有事务,此时add方法事务不起作用。原因是是因为insert方法没有事务,导致此时的SpringTransactionService不是代理对象,从而导致add事务不起作用,代码如下:

@Service
public class SpringTransactionServiceImpl implements SpringTransactionService{

    @Autowired
    private SpringTransactionMapper springTransactionMapper;
    
    @Override
    public int insert(TestZhu testZhu) {
        testZhu.setName("insert");;
        springTransactionMapper.insert(testZhu);
        add(testZhu);
        int i=1/0;
        return 1;
    }

    @Transactional(propagation=Propagation.REQUIRED)
    @Override
    public int add(TestZhu testZhu) {
        testZhu.setName("add");
        return springTransactionMapper.add(testZhu);
    }

}

解决方法:在入口方法 insert 上加上@Transactional(propagation=Propagation.REQUIRED)事务
,这样 service 对象一开始就会被代理,保证事务不会失效,spring 事务传播特性就会有效,即使 add 不结事务,insert 有事务,同样都会回滚。

@Transactional(propagation=Propagation.REQUIRED)
    @Override
    public int insert(TestZhu testZhu) {
        testZhu.setName("insert");;
        springTransactionMapper.insert(testZhu);
        add(testZhu);
        int i=1/0;
        return 1;
    }

    @Transactional(propagation=Propagation.REQUIRED)
    @Override
    public int add(TestZhu testZhu) {
        testZhu.setName("add");
        return springTransactionMapper.add(testZhu);
    }

所以要保证 spring 事务有效,同一 service 里的入口方法一定要有事务支持,否则同一service 里事务方法调用不会起作用。

3、service 方法不能是 private 级别的

相关文章

  • Spring之事务管理

    Spring事务管理(详解+实例)Spring详解(八)------事务管理 一. 概念 事务(Transacti...

  • Spring事务

    JerryTse—— Spring事务传播行为详解

  • 面试题总结 —— JAVA高级工程师

    一、1、Spring 事务的隔离性,并说说每个隔离性的区别 解答:Spring事务详解 2、Spring事务的传播...

  • 2018-06-09

    spring源码分析(八) 目录五、源码分析--6、Spring 事务原理详解----6.1、什么是事务(Tran...

  • Spring

    1.Spring事务的传播特性 2.Spring事务管理(详解+实例) 3.mem dump中unreachabl...

  • Index of contents

    一、事务 @TransactionalSpring事务传播行为详解Spring事务管理的两种方式try catch...

  • Spring中的事务处理

    1. spring 的事务属性 1.1 什么是事务属性 1.2 如何添加事务属性 1.3 事务属性详解 1.3.1...

  • 一文解析Spring编程式和声明式事务实例讲解

    接上一篇:一文解析Spring事务管理详解;通俗易懂,轻松掌握! Spring事务管理 Spring支持两种方式的...

  • JAVA高级工程师-面试题

    一:大框架方面问题 1、Spring 事务的隔离性,并说说每个隔离性的区别 解答:Spring事务详解 2、Spr...

  • Spring事务详解

    spring 事务不起作用的几种情况:1、spring MVC的spring-mvc.xml配置文件扫描了serv...

网友评论

    本文标题:Spring事务详解

    本文链接:https://www.haomeiwen.com/subject/cpzliftx.html