AOP不能拦截quartz Job?

发布于 2022-09-04 19:03:12 字数 676 浏览 26 评论 0

想要在每个Job跑之前插入一段逻辑,但如下代码经测试进不去AOP的代码,为什么?如果实在不行,还有什么方案可以实现吗?

代码贴在下面:

@Component
public class CheckPayJob {
    
    @Autowired
    private OrderService orderService;
    
    @Scheduled(cron="${checkPay.cron}")
    public void execute() {
        // some job core here
    }
}

@Component
@Aspect
public class JobAspect {
    
    @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
    public void scheduledPointCut() {}
    
    @Before("scheduledPointCut()")
    public void before() throws Throwable {
        String T = IdMaker.generate();
        MDC.put(Constants.T, T);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

挽容 2022-09-11 19:03:12

直接对方法进行切入试试。。。。

娇妻 2022-09-11 19:03:12

首先你要明白Spring两种代理方式的区别。
你想拦截任务调度的注解,在这之前织入特定的逻辑,那就必须保证这个任务类中不能含有调用自身方法的方法或引用,也就是说,这个类必须是经过代理的。或者去applicationContext获取到Bean之后再调用,否则aspectJ将无法正常拦截。
你要检查你这个Bean是否被Spring代理过,如果正常代理过,则需要检查是否有自身的引用,this,或者autowired自身之类的。

最初的梦 2022-09-11 19:03:12

我也遇到这样问题的 ,,请问你是怎么解决的

池木 2022-09-11 19:03:12
    schedulerFactory.getScheduler().getListenerManager().addJobListener(new JobListener() {
            @Override
            public String getName() {
            }

            @Override
            public void jobToBeExecuted(JobExecutionContext context) {
            }

            @Override
            public void jobExecutionVetoed(JobExecutionContext context) {
            }

            @Override
            public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
            }
        });
廻憶裏菂餘溫 2022-09-11 19:03:12

感觉是你切入点写错了吧,qartz的执行的主体是job的execute方法吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文