@Aspect
@Component
public class TransactionAspect {
@Autowired
DataSourceTransactionManager mysqlDataSourceTransactionManager;
public static final ThreadLocal<TransactionStatus> transation_status = new ThreadLocal<TransactionStatus>();
@Before("executionService()")
public void before(){
if (transation_status.get() != null){
return;
}
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = mysqlDataSourceTransactionManager.getTransaction(def);
transation_status.set(status);
}
@Pointcut("execution(com..*Controller.*(..))")//controller路径
public void executionService(){
}
//统一提交
@AfterReturning("executionService()")
public void afterReturning(){
try{
if (transation_status.get() == null){
return;
}
mysqlDataSourceTransactionManager.commit(transation_status.get());
}finally{
transation_status.remove();
}
}
//报错整体回滚
@AfterThrowing("executionService()")
public void afterThrowing(){
try{
if (transation_status.get() == null){
return;
}
mysqlDataSourceTransactionManager.rollback(transation_status.get());
}finally{
transation_status.remove();
}
}
controller方法调用不同service,用spring切面AOP控制controller的事务DataSourceTransactionManager
最新推荐文章于 2022-11-27 19:12:08 发布