[英]Spring @Autowired beans are null - how to find the mistake
我將Spring批處理和石英計時器集成到了Spring-MVC應用程序中。 目前,我有幾個目錄:
@Autowire
在任何地方都可以使用,但是在MyBatchJob.java中可用(->代碼可以編譯,但運行時屬性為NULL)
- batch
+- MyProcessor
+- MyReader
+- MyWriter
+- MyListener
- config
+- MainConfig
+- BatchConfig
- controller
[...]
- schedule
+- MyBatchJob
BatchConfig帶有以下注釋:
@Configuration
@ComponentScan(basePackages = "my.backend.schedule")
@EnableBatchProcessing // imports jobLauncher, stepBuilderFactory, jobBuilderFactory, ...
public class BatchConfig {
@Bean
public JobDetail jobDetail() {
return newJob(MyBatchJob.class)
.withIdentity("name", "group")
.build();
}
並使用@Import @Import(BatchConfig.class)
導入MainConfig中。 在此配置文件和控制器中,我可以@Autowire
我需要的類。 但這在my.backend.schedule.MyBatchJob類中不起作用:
@Component
public class MyBatchJob implements org.quartz.Job {
@Autowired
JobLauncher jobLauncher; // null
@Autowired
StepBuilderFactory stepBuilderFactory; // null
@Autowired
JobBuilderFactory jobBuilderFactory; // null
這是什么原因,如何找到並修復它?
Meta:我已經搜索了很多內容,並且在SO上看到了很多線程-但是沒有找到解決方案。 我已經知道彈簧豆如何在容器中生活,但這並沒有給我答案-我可能會忽略一些事情。
編輯:附加到上面的BatchConfig類中的請求的其他信息。
edit2:更改為JobDetailFactoryBean:
BatchConfig:
@Bean
public JobDetailFactoryBean jobDetailFactory() {
JobDetailFactoryBean factory = new JobDetailFactoryBean();
factory.setJobClass(MyBatchJob.class);
return factory;
}
@Bean
public Trigger myJobTrigger() throws Exception {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
Trigger trigger = newTrigger()
.withIdentity("mySynchTrigger", "synch")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(30) // testing
.repeatForever())
.build();
scheduler.scheduleJob(jobDetailFactory().getObject(), trigger);
return trigger;
}
您應該按此處所述注冊JobDetailFactoryBean ,而不要自己使用Quartz API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.