web-dev-qa-db-ja.com

インスタンス変数をQuartzジョブに渡す方法

Quartzでインスタンス変数を外部に渡す方法はありますか?

以下は、書きたい擬似コードです。このジョブにexternalInstanceを渡すにはどうすればよいですか?

public class SimpleJob implements Job {
        @Override
        public void execute(JobExecutionContext context)
                throws JobExecutionException {

            float avg = externalInstance.calculateAvg();
        }
}
25
janetsmith

インスタンスをschedulerContextに配置できます。ジョブをスケジュールするときは、その直前に以下を実行できます。

getScheduler().getContext().put("externalInstance", externalInstance);

あなたの職種は以下のようになります:

public class SimpleJob implements Job {
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SchedulerContext schedulerContext = null;
        try {
            schedulerContext = context.getScheduler().getContext();
        } catch (SchedulerException e1) {
            e1.printStackTrace();
        }
        ExternalInstance externalInstance =
            (ExternalInstance) schedulerContext.get("externalInstance");

        float avg = externalInstance.calculateAvg();
    }
}

Springを使用している場合、実際にはspringのサポートを使用して、 Link

53
Rips

トリガーを使用してジョブをスケジュールするときに、JobDataMapに追加されるJobDetailを定義します。そのJobDetailオブジェクトは、JobExecutionContextexecute()メソッドに渡されるJobに存在します。したがって、JobDataMapを介してexternalInstanceを渡す方法を理解する必要があります。 HTH。

9
Vikdor

この問題を解決するには、必要な情報を1つのHashMapに配置して1つのインターフェイスを作成します。

Quartz Jobクラスにこのインターフェイスを実装し、この情報にアクセスできるようにします。

IFace

Map<JobKey,Object> map = new HashMap<>();

Job

map.get(context.getJobDetail().getKey()) =>  will give you Object
2
Harsh Maheswari

これはJobFactoryの責任です。デフォルトのPropertySettingJobFactory実装は、Schdeulerコンテキスト、トリガー、およびジョブの詳細にあるプロパティに基づいて、Beanセッターメソッドを呼び出します。したがって、適切なsetContext() setterメソッドを実装している限り、次のいずれかを実行できるはずです。

scheduler.getContext().put("context", context);

または

Trigger trigger = TriggerBuilder.newTrigger()
  ...
  .usingJobData("context", context)
  .build()

または

JobDetail job = JobBuilder.newJob(SimpleJob.class)
  ...
  .usingJobData("context", context)
  .build()

または、それだけでは不十分な場合は、Jobオブジェクトをインスタンス化する独自のJobFactoryクラスを提供できます。

0
Matthew