zoukankan      html  css  js  c++  java
  • problems_spring

    problems_spring

    1 记录一个spring事务未生效的问题

    DESC:

    public class AServiceImpl implements AService {
    	@Autowired
    	private BService bService;
    	
    	methodA() {
    		methodB();
    		bService.methodC();
    	}
    
    	@Transactional(propagation = Propagation.REQUIRES_NEW)
    	methodB() {
    		...
    	}
    }
    

    methodA()方法中先调用methodB(),再调用methodC()。其中,methodB()和methodA()属于同一个对象,methodC()属于另一个对象。并且,methodC()的执行,必须要依赖methodB()的增删改的执行结果。可是实际发现methodB()的增删改的执行结果并没有立刻持久化到数据库,而是在methodA()彻底执行完后才持久化到数据库,也就是说,methodB()仍然和methodA()在同一个事务中,这导致methodC()的执行结果错误。

    RCA:
    spring事务,方法上添加的注解 @Transactional(propagation = Propagation.REQUIRES_NEW) 不生效。具体原因参考下面的参考链接。

    SOLUTION:
    方法1:将methodB()移到另一个对象中;
    方法2:将methodB()中的调用的实际进行增删改的方法上,添加注解 @Transactional(propagation = Propagation.REQUIRES_NEW),methodB()本身去掉该注解 @Transactional;
    方法3:从beanFactory中获取bean SpringContextUtil.getBean(…)

    reference: https://blog.csdn.net/hepei120/article/details/78058468
    https://www.jianshu.com/p/e57e55e98814

    2

    3

    4

    5

    6

  • 相关阅读:
    mybatis-generator.xml
    模板下载
    任务导出
    订单导出
    创建指定日期任务
    字符串的知识
    数组元素反转
    JVM 中知识
    Redis介绍
    JsonP
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15749718.html
Copyright © 2011-2022 走看看