0
我正試圖在dropwizard應用程序中使用Quartz作業調度程序來安排作業。在實現Quartz Job接口的類中,我注入了幾個服務類來使用它的方法。但它沒有被注入,對那個對象變爲空。有人可以幫助我嗎?依賴注入在Quartz工作預定的類上不工作
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和我一樣綁定結合IMyService爲了MyService落實在我的應用類(IMyservice.class).toInstance(新的MyService() );
查看此鏈接:https://devsoap.com/injecting-cdi-managed-beans-into-quarz-jobs/。另外,在你的代碼中,爲什麼你在'myService'字段使用'public static'? – Rouliboy