デフォルトのクラスを拡張して、いくつかのメンバー変数とメンバーメソッドを追加して、独自のジョブクラスを作成しました。ジョブがトリガーされ、非常に長い間実行されているのを見ました。
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);
豆を返します。
}
}
ハイ