デフォルトのクラスを拡張して、いくつかのメンバー変数とメンバーメソッドを追加して、独自のジョブクラスを作成しました。ジョブがトリガーされ、非常に長い間実行されているのを見ました。
JobDetail ではなく Job Instance を取得したかっただけで、自分で定義したメンバー メソッドを呼び出したり、メンバー変数にアクセスしたりしたかったのです。
これを達成する方法を教えてください。
ありがとう、カシール
デフォルトのクラスを拡張して、いくつかのメンバー変数とメンバーメソッドを追加して、独自のジョブクラスを作成しました。ジョブがトリガーされ、非常に長い間実行されているのを見ました。
JobDetail ではなく Job Instance を取得したかっただけで、自分で定義したメンバー メソッドを呼び出したり、メンバー変数にアクセスしたりしたかったのです。
これを達成する方法を教えてください。
ありがとう、カシール
おそらくクォーツはリモートスケジューリングモード(つまりクラスター)と互換性があるため、そのような方法はありません。
しかし、単一のサーバー/アプリケーションコンテキストで使用している場合は、おそらく独自の JobFactory ( http://quartz-scheduler.org/api/2.1.5/org/quartz/simpl/SimpleJobFactory.html ) を実装できます。インスタンスの作成をスーパークラスに委譲し、そのインスタンスを何らかの形でマップなどに登録するだけです。次に、マップ キーをループして、見ているインスタンスを見つける必要があります。
このようなソリューションではメモリリークに注意してください
春の設定ファイルで:
<!-- quartz scheduler -->
<bean id="orchestration-api-quartz-factory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="classpath:spring/quartz.properties"/>
<property name="jobFactory">
<bean class="service.scheduler.SpringServiceJobFactory"/>
</property>
</bean>
そして、Factory の基本的な実装:
/** * このジョブ ファクトリは、JobClass に対応する Spring Bean を見つけようとします。 * * @author マチュー・ポス */ public class SpringServiceJobFactory extends SpringBeanJobFactory implement JobFactory { @Autowired プライベート ApplicationContext コンテキスト。 /** * {@inheritDoc} */ @オーバーライド 保護されたオブジェクト createJobInstance(最終 TriggerFiredBundle バンドル) 例外をスローします { // Bean インスタンスを作成または取得する オブジェクト Bean = this.context.getBean(bundle.getJobDetail().getJobClass()); // Bean で必要なことを行います // ただし、何をしたかを覚えておいてください。 // メモリ リークが発生します !!! // myConcurrentMap.put("job.key", bean); 豆を返します。 } }
ハイ