4

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 を介したジョブ リスナーの設定に関する情報はありますか?

4

1 に答える 1

0

まあ、それはジョブリスナーとは正確には関係ありませんが、最終的に@autowiredの場所を介してリスナーを注入したい場合は、xml構成ファイルでマッピングを定義するだけで済みます(サービス/コンポーネント名に注意してください)。トリックを行う必要があります..実際にQuartzジョブにサービスを注入することを示しています。

于 2015-03-13T00:32:54.990 に答える