我在项目中使用Quartz调度程序进行调度。我需要收集统计数据,例如工作的时间,持续时间和工作次数。我想使用Spring AOP。为此,我正在制作Job类Spring管理的bean。 Spring为每个Job类创建一个Proxy类。但是现在当Quartz尝试执行这个Spring管理的Job时,我得到了为Spring为Job创建的Proxy类的InstantiationException。
org.quartz.SchedulerException:问题实例化类'$ Proxy6' [请参阅嵌套异常:java.lang.InstantiationException:$ Proxy6]
有人可以为这个问题提出解决方案吗?
答案 0 :(得分:1)
如果您直接使用quarz(不通过Spring Schedule注释),您可以直接向quarz询问统计数据。 - 其中许多已经在quarz中实现。
答案 1 :(得分:0)
因为Quartz Job类是由Quartz容器而不是Spring容器管理的,所以Spring AOP无法实现您的目标。为了您的目的,有两种方法可以解决此问题:
Quartz内置了侦听器机制,随着AOP的工作,您可以使用全局侦听器来执行所需的操作。有关侦听器的更多信息,请参见:Quartz document。
如果坚持使用Spring AOP,则必须自定义作业类的实例化过程,以便由Spring Container管理作业类。一种方法是编写自己的JobFactory,它扩展SpringBeanJobFactory
,然后覆盖createJobInstance()
方法。如果您需要更多有关此内容的信息,请对此发表评论。我将对此进行详细介绍。