如何自动装配Quartz JobListener

时间:2013-08-02 18:52:28

标签: spring quartz-scheduler

我正在使用Spring注释来连接我的应用程序依赖项。

据我所知,没有办法将我的JobListener注入Quartz SchedulerFactoryBean,因为它在这里配置:

   @Bean(name="schedulerFactory")
   public SchedulerFactoryBean schedulerFactoryBean() throws Exception {
       SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
       schedulerFactoryBean.setApplicationContextSchedulerContextKey("applicationContext");
       schedulerFactoryBean.setConfigLocation(new ClassPathResource("quartz.properties"));
       schedulerFactoryBean.setDataSource(dataSource);
       // This call results in the error:
       //   java.lang.IllegalStateException: Non-global JobListeners not supported on  
       //   Quartz 2 - manually register a Matcher against the Quartz ListenerManager instead
       //schedulerFactoryBean.setJobListeners(new JobListener[] { jobActivityListener() });
       return schedulerFactoryBean;
}

我目前不得不以编程方式配置首次触发作业时要创建的JobListener:

ListenerManager listenerManager = scheduler.getListenerManager();
if (listenerManager.getJobListener(jobKey.getName()) == null) {
    logger.debug("ADDING JOB LISTENER FOR " + jobKey.getName());
    listenerManager.addJobListener(new JobActivityListener(), keyEquals(jobKey));
}

这并不理想,因为我们希望Spring管理依赖项,并注入JobListener所需的依赖项。

是否有关于通过Spring配置作业监听器的信息?

1 个答案:

答案 0 :(得分:0)

嗯,它与作业监听器并不完全相关,但最终如果你想通过@autowired位置注入监听器,在xml配置文件中你必须简单地定义映射(关心服务/组件名称) )这应该做的伎俩.. 它显示我实际上在Quartz作业中注入服务。