【Java高级】如何写出优雅可靠事务代码?基于Spring事务扩展

励志当最强课代表的我来给大家总结总结👍👍👍
如何写出优雅可靠事务代码?基于Spring事务扩展
视频内容:
1️⃣异步线程✍️
2️⃣Spring事务失效的场景还有几点📄
视频内容:
1️⃣异步线程✍️
- 异步线程拿到了连接和主线程,它拿到了连接肯定不是同一个,所以只有当一个数据库同一个连接,你才能去做事务控制。这种异步线程的情况在 spring 里面的事务控制里面是不支持的。多线程的事物应该怎么去控制,大家可以下来去想一下。
- 由于各种历史原因,或者引入的成本太高,或者这个场景本身对一致性的要求并不是特别高,是尽量去保证做到一个一致,并没有去引入这种本地消息表、事务消息这种比较重的分布式事务实现
- 平时尽量要保证我们的事物尽量小,开启关闭事物,这个是有资源消耗成本的。另外就是数据库的连接池,它也是有限的,如果有大事务,你会一直持有连接不释放,对于整个线程池的吞吐量是有影响的。所以在写代码的时候要避免大事务,比如能批量的就尽量批量,不要用循环,也尽量不要在事务里面去做一些 RPC 这种比较耗时的操作。
- 00:42

2️⃣Spring事务失效的场景还有几点📄
- 非public修饰
- final修饰也会失效, 动态代理需要重写方法才能生效事务, final修饰则无法重写
- static修饰也会失效
- 吞了异常, catch住没有抛给spring
- 抛了错误的异常, catch住手动抛Exception则不会回滚, 因为spirng事务只会处理RuntimeException和Error
03:37
