284集 在同一个ServiceImpl中 在一个事务里调用另一个事务 如果不用aspectj创建的动态代理 其他事务b c 的各种设置都是无效的 (如过期时间) 都遵循父事务的设置 想要子事务设置有效 就要
//启动类上
@EnableAspectJAutoProxy(exposeProxy = true)
/**
* 分布式事务 事务是使代理对象来控制的
* 1.引入
* <dependency>
* <groupId>org.springframework.boot</groupId>
* <artifactId>spring-boot-starter-aop</artifactId>
* </dependency>
*
* 引入上面这个依赖就引入了 aspectj
* 使用 aspectj 即使没有接口也可以创建动态代理
*
* 2. @EnableAspectJAutoProxy 不开启这个注解的话 默认使用jdk什么接口的动态代理
* 以后所有的动态代理都是由aspectj创建的
* (exposeProxy = true) 对外暴露代理对象设置为 true
*
* 3. 本类的事务互调 使用代理对象
*/
serviceImpl里
@Transactional(timeout = 30)
public void a(){
OrderServiceImpl orderService = (OrderServiceImpl) AopContext.currentProxy();
orderService.b();
orderService.c();
}
@Transactional(propagation = Propagation.REQUIRED,timeout = 2)
public void b(){}
@Transactional(propagation = Propagation.REQUIRED,timeout = 20)
public void c(){}