问题:
现在有这么一个类
say() 方法调用 jump() 方法,其中jump 有 事务注解
public class Animal {
public void say(){
jump();
}
@Transactional
public void jump(){
....
}
}
运行结果可知, jump() 方法没有执行事务;
解决方案:
1、在SpringBoot 入口类中添加 @EnableAspectJAutoProxy(exposeProxy = true) 注解
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true)
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class);
}
}
2、添加jar包
本例使用的是 springboot 2.1.5 版本的.故添加jar 5.1.2 包 ,其他版本jar 包可以在 https://mvnrepository.com/artifact/org.springframework/spring-aspects 查看
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
3、重点
把调用方法改为 ((Animal) AopContext.currentProxy()).jump(); 就可以执行事务了
完整例子代码如下
import com.cmbird.zyj.service.CfServiceImpl;
import org.springframework.aop.framework.AopContext;
import org.springframework.transaction.annotation.Transactional;
public class Animal {
public void say(){
((Animal) AopContext.currentProxy()).jump();
}
@Transactional
public void jump(){
}
}