私はクライアント用のQuartz(サーバではない)を設定しています。私は新しいJobDetail job
を作成する必要がある場合、私は、次の実行時に新しいJobDetailジョブを作成する方法は?
JobDetail job = JobBuilder.newJob(TestJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = . .
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
は当初、私は私がnewJob
にクラスのオブジェクトを養うだろうと思っただろう。
しかし、newJob
メソッドでは、クラスを引数として取ります(クラスのインスタンスではありません)。 JobBuilder org.quartz.JobBuilder.newJob(Class<? extends Job> jobClass)
実行時に新しいクラスを作成することはできません。これは少なくとも効率的ではありません。
したがって、実行時に新しいJobDetail job
を追加するにはどうすればよいですか?
実行時にTestJob
クラスを抽象化する必要があります。私はここで非常に混乱しています
stackoverflowに同様の質問がありました。したがって、「クォーツスケジューラのJobFactory APIは、カスタムクラスローダを介してジョブクラスをロードし、ジョブを真に動的に追加できるようになります」。
どのようにですか?
ありがとうございました。しかし、これは、新しい仕事が追加されるたびにすべてのジョブをリロードする必要があることを意味します。 – Emily
クォーツスケジューラの未知のクラスを処理する代わりに、コードベースのRMIを使用することはできませんか? – mam10eks
新しいジョブを作成するために既存のジョブをリロードする必要はありません。この特定のトリガがここで指定したjobdetailsで起動したときに呼び出される同じJobクラス( 'TestJob.class')を使用しているだけです。ジョブの詳細のみが動的で、TestJobクラスのexecuteメソッドが動的データとともに呼び出されます。 –