使用Spring AOP和Quartz调度程序

问题描述 投票:1回答:2

我在我的项目中使用Quartz调度程序进行调度。我需要收集统计数据,例如工作的时间,持续时间和工作次数。我想使用Spring AOP。为此,我正在制作Job类Spring管理的bean。 Spring为每个Job类创建一个Proxy类。但是现在当Quartz尝试执行这个Spring管理的Job时,我得到了为Spring为Job创建的Proxy类的InstantiationException。

org.quartz.SchedulerException:实例化类'$ Proxy6'的问题[参见嵌套异常:java.lang.InstantiationException:$ Proxy6]

有人可以为这个问题建议一个解决方案吗?

spring quartz-scheduler
2个回答
1
投票

如果您直接使用quarz(而不是通过Spring Schedule注释),您可以直接向quarz询问统计信息。 - 其中许多已经在quarz中实现。


0
投票

因为Quartz Job类是由Quartz容器管理而不是Spring容器,所以Spring AOP无法达到你的目标。为了您的目的,有两种方法可以解决这个问题:

  1. Quartz内置了监听器机制,你可以使用全局监听器来实现你想要的,就像AOP一样。有关侦听器的更多信息,请参阅:Quartz document
  2. 如果您坚持使用Spring AOP,则必须自定义作业类实例化过程,以便作业类由Spring Container管理。一种方法是编写自己的JobFactory,它扩展SpringBeanJobFactory然后覆盖createJobInstance()方法。如果您想了解更多相关信息,请对此发表评论,我会在此详细介绍。
© www.soinside.com 2019 - 2024. All rights reserved.