【发布时间】:2020-05-18 13:23:17
【问题描述】:
我有 Spring 启动应用程序 AspectJ 配置为在一项服务返回数据后异步工作但这仅在某个时候无法触发没有错误记录没有警告,这种情况随时可能发生,如果我错过了任何配置,请告诉我?
应用代码
@SpringBootApplication
@EnableAspectJAutoProxy
@EnableAsync
public class TitlesCompareUtilityApplication {
public static void main(String[] args) {
SpringApplication.run(TitlesCompareUtilityApplication.class, args);
}
}
方面代码
@Aspect
@Component
public class DistributedLoggingAspect {
private static Logger log = LoggerFactory.getLogger(DistributedLoggingAspect.class);
@Async
@AfterReturning("execution(* com.mycomp.repo.TyRepository.findById(..))")
public void logAfterReturn(JoinPoint joinPoint) {
int id = (int) joinPoint.getArgs()[0];
log.info("logAfterReturn() is running! id:{}", id);
}
}
【问题讨论】:
-
在我的本地验证中按预期工作。您如何确认方面有时无法触发?请提供minimal reproducible example
-
正如我所提到的,这种情况很少发生,我无法重现它
-
您如何确认方面有时无法触发?
@Around建议类型提供更多控制权,可以帮助您调试 -
没有看到aspect logAfterReturn的日志但是在服务中执行成功,
-
只要它不能在不同的机器上随意复制,并且没有附加证据来证明遗漏了建议的方面,就很难评论可能发生的事情。如果你有一个可重现的测试用例,你可以将它作为一个 bug 报告给 spring 团队。
标签: spring spring-boot java-8 aspectj spring-aspects