0

我有一个 Spring Boot 批处理应用程序。我有两个工作和两个不同的 JobExecutionListener。但始终只有一个 JobExecutionListener 从两个作业中调用。

工作一

@Configuration
public class TestDriveJob {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    TestDriveTasklet testDriveTasklet;

    @Autowired
    BatchJobMgmt batchJobMgmt;

    @Autowired
    TestDriveJobExecutionListener testDriveJobExecutionListener;

    private static final String JOB_NAME = "test-drive-job";

    @Scheduled(fixedDelay = 100 * 1000, initialDelay = 5000)
    public void schedule() throws Exception {
        if (batchJobMgmt.isJobAllowed(JOB_NAME)) {
            JobParameters param = new JobParametersBuilder().addString("JobID", "TEST" + String.valueOf(System.currentTimeMillis())).toJobParameters();
            jobLauncher.run(job(), param);
        }
    }

    @Bean
    public Job job() {
        return jobBuilderFactory.get(JOB_NAME).listener(testDriveJobExecutionListener).incrementer(new RunIdIncrementer()).start(testDriveStep()).build();
    }

    @Bean
    public Step testDriveStep() {
        return stepBuilderFactory.get("test-drive-step").tasklet(testDriveTasklet).listener(testDriveJobExecutionListener).build();
    }

}

工作二

@Configuration
public class ExtendedWarrantyJob {

    private static final Logger LOGGER = LoggerFactory.getLogger(ExtendedWarrantyJob.class);

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    ExtendedWarrantyTasklet extendedWarrantyTasklet;

    @Autowired
    BatchJobMgmt batchJobMgmt;

    @Autowired
    ExtendedWarrantyJobExecutionListener extendedWarrantyJobExecutionListener;

    private static final String JOB_NAME = "extended-warranty-job";

    @Scheduled(fixedDelay = 900 * 1000, initialDelay = 20000)
    public void schedule() throws Exception {
        if (batchJobMgmt.isJobAllowed(JOB_NAME)) {
            LOGGER.debug("Extended Warranty Job Started at :" + new Date());
            JobParameters param = new JobParametersBuilder().addString("JobID", String.valueOf(System.currentTimeMillis())).toJobParameters();
            JobExecution execution = jobLauncher.run(job(), param);
            LOGGER.debug("Extended Warranty  Job finished with status :" + execution.getStatus());
        }
    }

    @Bean
    public Job job() {
        return jobBuilderFactory.get(JOB_NAME).listener(extendedWarrantyJobExecutionListener).incrementer(new RunIdIncrementer()).start(extendedWarrantyStep())
                .build();
    }

    @Bean
    public Step extendedWarrantyStep() {
        return stepBuilderFactory.get("extended-warranty-step").tasklet(extendedWarrantyTasklet).build();
    }

}

工作一听众

@Service
public class TestDriveJobExecutionListener implements JobExecutionListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestDriveJobExecutionListener.class);

    @Override
    public void beforeJob(JobExecution jobExecution) {
        LOGGER.debug("{} Started at : {}", jobExecution.getJobInstance().getJobName(), new Date());

    }

    @Override
    public void afterJob(JobExecution jobExecution) {
        LOGGER.debug("{} Completed at : {}", jobExecution.getJobInstance().getJobName(), new Date());
    }

}

工作二听众

@Service
public class ExtendedWarrantyJobExecutionListener implements JobExecutionListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(ExtendedWarrantyJobExecutionListener.class);

    @Override
    public void beforeJob(JobExecution jobExecution) {
        LOGGER.debug("{} Started=== at : {}", jobExecution.getJobInstance().getJobName(), new Date());
    }

    @Override
    public void afterJob(JobExecution jobExecution) {
        LOGGER.debug("{} Completed at : {}", jobExecution.getJobInstance().getJobName(), new Date());
    }

}

这两个作业都在执行,没有任何问题。但总是调用一个听众的工作。作业二监听器不工作。我尝试将@Qualifier 添加到@@Autowired 注释中,但这没有任何意义。

任何帮助表示赞赏。

4

0 回答 0