java spring事务父方法、子方法各自回滚问题处理

简介: java spring事务父方法、子方法各自回滚问题处理


java spring事务父方法、子方法各自回滚问题处理


问题描述

service实现类中A方法(父方法)调用B方法(子方法),两个方法均开启事务,且事务各自独立,A方法和B方法均可自行回滚且相互之间各不干扰。


A方法

注解@Transactional(rollbackFor = Exception.class) 开启A方法的事务

image.png

其中: goodsService.importData3();  调用B方法或者采用SpringUtils.getAopProxy(this).importData3(); 调用B方法均可以,这里try  catch B方法异常是为了防止B方法造成的异常影响到A方法的插入

代码如下:

  @Override
  @Transactional(rollbackFor = Exception.class)
  public Map importData(MultipartFile file, String examId, String subjectId, String seasonId){
    Map map = new HashMap(8);
    //插入业务表信息
    Goods goods = new Goods();
    goods.setName("商品002");
    insertGoods(goods);
    map.put("num1",1);
    map.put("num2",2);
    map.put("num3",3);
    System.out.println(1/0);
    try {
      goodsService.importData3();
      SpringUtils.getAopProxy(this).importData3();
    }catch (Exception e) {
      e.printStackTrace();
    }
    return map;
  }


B方法

注解@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)开启B方法的新事务,且A方法与B方法不属于同一个事务

image.png

  @Override
  @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
  public void importData3() {
    Goods goods = new Goods();
    goods.setName("商品003");
    insertGoods(goods);
    System.out.println(1/0);
  }


注:个人测试有效,大家可以作为参考


相关文章
|
6天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
22 1
Spring 框架:Java 开发者的春天
|
4天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
31 17
|
6天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
8 1
|
2天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
10 1
|
7天前
|
存储 安全 Java
|
5天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
11 3
|
7天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
5天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
9 2
|
5天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
8 1