Почему Spring игнорирует @Transactional в spring aop? - PullRequest
0 голосов
/ 11 марта 2019

Я хочу добавить несколько журналов в свой сервис, поэтому я использую Annotation и AOP. Сначала я пишу такой код:

@Aspect
@Component
public class LogAspect {

    @Autowired
    LogService logService;

    @Transactional
    Object log(ProceedingJoinPoint point) throws Throwable{ 
        Object obj = null; 
        Signature signature = point.getSignature();  
        MethodSignature methodSignature = (MethodSignature)signature;
        Method method = methodSignature.getMethod();
        LogAnnotation myAnno = method.getAnnotation(LogAnnotation.class); 
        String pageId=null;   
        JSONObject object=(JSONObject)point.getArgs()[0]; 
        pageId=object.getString("pageId"); 
        obj = point.proceed(); //do business job and affect the database
        int i=1/0; //test Transactional
        logService.insertLog(pageId,(LogVo)obj);    
        return obj;
    }

    @Around("@annotation(com.mycompany.annotation.LogAnnotation)")
    public Object triggerSome(ProceedingJoinPoint pjp) throws Throwable { 
        return log( pjp);
    } 
}

В моем примере я добавил @Transactional идобавьте исключение / by zero, но когда код деловой работы все еще влияет на базу данных. Кажется, это не имеет ничего общего со словом @Transactional. Как изменить мой код?Я пытаюсь изменить весь свой код на службу, но транзакция по-прежнему отсутствует.

@Aspect
@Component
public class LogAspect { 
   @Autowired
   LogService logService; 
@Around("@annotation(com.mycompany.annotation.LogAnnotation)")
public Object triggerSome(ProceedingJoinPoint pjp) throws Throwable { 
    return  logService.commonLog( pjp);
 } 
}

Общая служба журналов:

@Transactional(rollbackFor=Throwable.class)
@Override
public Object commonLog(ProceedingJoinPoint point) throws Throwable{ 
     Object obj = null; 
    Signature signature = point.getSignature();  
      MethodSignature methodSignature = (MethodSignature)signature;
      Method method = methodSignature.getMethod();
      LogAnnotation myAnno = method.getAnnotation(LogAnnotation.class);   
      String pageId=null;  
      JSONObject object=(JSONObject)point.getArgs()[0]; 
       pageId=object.getString("pageId"); 
      obj = point.proceed(); 
       int i=1/0; 
       LogService.insertLog(pageId,(LogVo)obj);     
       return obj;

}
...