当前位置: 首页 > news >正文

同一个Service内部调用开启事务

同一个Service内部调用开启事务


事务是基于代理实现的,方法内部调用正常情况下是不走代理的,所以如果是子方法开启事务,正常情况下是不生效的


下面的代码,从Controller层去调用,最终还是会插入数据

@Service
public class CliServiceImpl extends ServiceImpl<CliMapper, Cli> implements CliService {@Overridepublic ResultObj<Object> add() {test();return ResultObj.success();}@Transactional(rollbackFor = Exception.class)public void test() {Cli cli = new Cli();cli.setName(UUID.fastUUID().toString());this.save(cli);if (true) {throw new RuntimeException("xx");}}
}



关于事务的的原理参看这里

  1. Spring使用@Transactional 管理事务,Java事务详解
  2. Spring事务源码解析【一次一篇文章弄懂】



如果我们非要让上面的事务生效,也不是没有办法,改为通过代理调用


方式一:AopContext

// 之前
test();// 之后
((CliServiceImpl) AopContext.currentProxy()).test();

需要额外加入pom和在启动类开启

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId>
</dependency>
@SpringBootApplication
@MapperScan("com.xdx97.cli.mapper")
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

方法二:ApplicationContext

@Autowired
private ApplicationContext applicationContext;CliServiceImpl proxy = applicationContext.getBean(CliServiceImpl.class);
proxy.test();

注: 这两种方式 并不是创建的新代理对象,是从容器里面拿到的,而对象几乎都是单例的,就不用担心频繁的创建和销毁对象


http://www.mrgr.cn/news/60764.html

相关文章:

  • LeetCode437. 路径总和 III(2024秋季每日一题 50)
  • 【小白学机器学习21】 理解假设检验的关键:反证法
  • 排查PHP服务器CPU占用率高的问题
  • PostgreSQL的学习心得和知识总结(一百五十六)|auto_explain — log execution plans of slow queries
  • 新增新质生产力论文复刻(SSCI)10份新质生产力数据合集-最新出炉 附下载链接
  • Java 基于 poi 和 itextpdf 实现 excel 转 pdf
  • Python多语双峰分布
  • 练习LabVIEW第二十四题
  • Unity Job System详解(3)——NativeArray源码分析
  • 100种算法【Python版】第21篇——Wilson算法
  • Java Lock CountDownLatch 总结
  • 李宇皓现身第十届“文荣奖”,allblack造型帅气绅士引关注
  • 加强版 第一节图像二值化定义
  • 四、常量指针其他
  • 信创认证(信创人才考评证书)的含金量?到底有多少?
  • 【Flask】三、Flask 常见项目架构
  • IPV6扩展头部
  • SQL进阶技巧:Hive如何进行更新和删除操作?
  • 自修室预约系统|基于java和小程序的自修室预约系统设计与实现(源码+数据库+文档)
  • 代码随想录第46天|
  • 前端:遇到的面试题
  • Oracle 第10章:触发器
  • Spring MVC介绍
  • Spring Boot 3项目创建与示例(Web+JPA)
  • 江协科技STM32学习- P23 DMA 直接存储器存取
  • CSS.选择器