30

Quartzでインスタンス変数を外部に渡す方法を知りたいですか?

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

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

            float avg = externalInstance.calculateAvg();
        }
}
4

6 に答える 6

61

インスタンスを 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 のサポートを使用して applicationContext 全体を注入できます

于 2012-10-08T13:23:25.107 に答える
10

トリガーを使用してジョブをスケジュールしているときに、 にJobDataMap追加される を定義したはずJobDetailです。その JobDetail オブジェクトは、メソッドにJobExecutionContext渡される. したがって、externalInstance を に渡す方法を考え出す必要があります。HTH。execute()JobJobDataMap

于 2012-10-08T07:37:44.153 に答える
2

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

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

IFace

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

Job

map.get(context.getJobDetail().getKey()) =>  will give you Object
于 2016-10-13T10:38:26.243 に答える