簡體   English   中英

Spring @Autowired bean為空-如何查找錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM