我有一个Quartz Scheduler作为Spring启动应用程序的一部分。我正在从@Configuration
文件加载SchedulerFactory。这是我的设置:
Config.java:
@Configuration
public class Config {
@Bean(name="stdSchedulerFactory_api")
public StdSchedulerFactory getStdSchedulerFactory() throws SchedulerException{
return new StdSchedulerFactory("/etc/quartz.properties");
}
}
quartz.properties文件包含一个文件的位置,该文件包含要执行的作业列表。这是它在属性文件中的配置方式:
org.quartz.plugin.jobInitializer.fileNames =/etc/quartz-config.xml
quartz-config.xml的工作列表如下:
<job>
<name>MasterScheduleJob</name>
<group>MasterScheduleJobGroup</group>
<description>This is Master Job Scheduler</description>
<job-class>com.MasterScheduler</job-class>
<durability>true</durability>
<recover>false</recover>
</job>
Master.java
@Component
@Scope("singleton")
public class Master {
@PostConstruct
public static void init(){
// Get SchedulerFactory context from Config file and start the scheduler
SchedulerFactory factory = null;
factory = (StdSchedulerFactory) context.getBean("stdSchedulerFactory_api");
scheduler = factory.getScheduler();
setScheduler(scheduler);
scheduler.start();
}
}
当Master启动时,它会读取Quartz-config.xml文件,然后调用下面的MasterScheduler.java:
MasterScheduler.java
@Service
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class MasterScheduler implements Job {
@Autowired
public JobsScheduleRepository jobsScheduleRepository;
private List<JobsScheduleDAO> jobsScheduleDAO;
@Override
public void execute(JobExecutionContext jobContext) {
jobsScheduleDAO = jobsScheduleRepository.findAll();
}
}
当我运行此代码时,我得到一个空指针异常,说jobsScheduleRepository为null。我怀疑这是因为Quartz调度程序在内部使用new()启动MasterScheduler.java。我不想使用Spring提供的Quartz调度程序。还有其他选择吗?
如果有办法避免使用@Autowired
并直接访问存储库,我现在可以将其用作临时修复。