dropwizardアプリケーションでQuartzジョブスケジューラを使用してジョブをスケジューリングしようとしています。クォーツジョブインターフェースを実装するクラスでは、私のサービスクラスを少数注入してメソッドを使用します。しかし、それは注入されていない、そのオブジェクトのnullを取得しています。誰かが私を助けてくれますか?Quartz Jobのスケジュールクラスで依存関係注入が機能しない
JobManagerImplクラス
public class MyJobManagerImpl {
private SchedulerFactory schedulerFactory;
private Scheduler scheduler;
private static final String group = "REFRESH";
private static final Logger logger = LoggerFactory.getLogger(TcConnectionRefreshJobManagerImpl.class);
public MyJobManagerImpl(Properties quartzConfig) {
try {
schedulerFactory = new StdSchedulerFactory(quartzConfig);
scheduler = schedulerFactory.getScheduler();
scheduler.start();
} catch (SchedulerException e) {
logger.error("Error starting scheduler", e);
}
}
public boolean addJob(String name, int cronHour, int cronMinute) throws SchedulerException {
JobDetail jobDetail = newJob(TcConnectionRefreshJob.class).withIdentity(name, group)
.requestRecovery().build();
String cronString = "0 " + cronMinute+" "+cronHour+" ? * *" ;
CronTrigger cronTrigger = newTrigger().withIdentity(name, group).withSchedule(cronSchedule(cronString).
withMisfireHandlingInstructionDoNothing()).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
return true;
}
public boolean deleteJob(String name) {
JobKey jobKey = JobKey.jobKey(name,group);
TriggerKey triggerKey = TriggerKey.triggerKey(name,group);
try {
scheduler.unscheduleJob(triggerKey);
scheduler.deleteJob(jobKey);
} catch (SchedulerException e) {
logger.error("Exception occurred "+e);
return false;
}
return true;
}
ScheduledJobクラス
public class ScheduledJob implements Job {
public static IMyService myService;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
myService.executeAction();
}
@SuppressWarnings("static-access")
@Inject
public void setMyService(IMyService myService) {
this.myService = myService;
}
MyServiceではIMyServiceを実装し、バインドのように自分のアプリケーションクラスでMyServiceで実装にIMyServiceを結合しています(IMyservice.class).toInstance(新しいMyServiceで() );
このリンクをご覧ください:https://devsoap.com/injecting-cdi-managed-beans-into-quarz-jobs/また、あなたのコードで、 'myService'フィールドに' public static'をなぜ使用しますか? – Rouliboy