使用Spring AOP和Quartz调度程序

时间:2011-10-05 06:44:20

标签: spring quartz-scheduler

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

  

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

有人可以为这个问题提出解决方案吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  1. Quartz内置了侦听器机制,随着AOP的工作,您可以使用全局侦听器来执行所需的操作。有关侦听器的更多信息,请参见:Quartz document

  2. 如果坚持使用Spring AOP,则必须自定义作业类的实例化过程,以便由Spring Container管理作业类。一种方法是编写自己的JobFactory,它扩展SpringBeanJobFactory,然后覆盖createJobInstance()方法。如果您需要更多有关此内容的信息,请对此发表评论。我将对此进行详细介绍。