@Service("orderService")
public class OrderServiceImpl extends ServiceImpl<OrderDao, OrderEntity> implements OrderService {
// 事务使用代理对象来控制的
@Transactional(timeout = 30)
public void a() {
// 同一个对象内,事务方法互调默认被调的方法事务失效,使用当前调用方法的事务.原因绕过了代理对象
// b(); b的事务不生效
// c(); c的事务不生效
// this.b(); b的事务不生效
// this.c(); c的事务不生效
/**
* 解决:使用打理对象来调用事务方法
* 1.引入spring-boot-starter-aop,引入了aspectj
* 2.@EnableAspectJAutoProxy(exposeProxy = true),开启aspectj的动态代理.
* 以后所有的动态代理都是aspectj创建的(即使没有接口也可以创建动态代理,jdk动态代理要有接口)
* exposeProxy = true 对外暴露代理对象
* 3.使用AopContext.currentProxy获取代理对象,代理对象调用事务方法
*/
OrderServiceImpl orderService =(OrderServiceImpl) AopContext.currentProxy();
orderService.b(); // b的事务生效
orderService.c(); // c的事务生效
}
@Transactional(timeout = 20)
public void b() {
}
@Transactional(timeout = 10)
public void c() {
}
}