关于这个 Spring Batch @Scheduled() 注解以及如何手动启动 Spring Batch 作业的一些疑问?

Some doubts about this Spring Batch @Scheduled() annotation and how to manually start a Spring Batch job?

我是 Spring Batch 的新手,我对如何在特定时间安排作业开始有以下疑问。

在我的项目中我有这个 SpringBatchExampleJobLauncher class:

@Component
public class SpringBatchExampleJobLauncher {

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

    private final Job job;
    private final JobLauncher jobLauncher;
    private ExecutionContext executionContext;

    @Autowired
    public SpringBatchExampleJobLauncher(@Qualifier("updateNotaryDistrictsJob") Job job, 
                                         JobLauncher jobLauncher,
                                         ExecutionContext executionContext) {
        this.job = job;
        this.jobLauncher = jobLauncher;
        this.executionContext = executionContext;
    }

    @Scheduled(cron = "0/10 * * * * *")
    public void runSpringBatchExampleJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
        LOGGER.info("Spring Batch example job was started");
        
        List<NotaryDistrict> notaryDistrictsList = new ArrayList<NotaryDistrict>();
        executionContext.put("notaryDistrictsList", notaryDistrictsList);
        
        jobLauncher.run(job, newExecution());

        LOGGER.info("Spring Batch example job was stopped");
    }

    private JobParameters newExecution() {
        Map<String, JobParameter> parameters = new HashMap<>();

        JobParameter parameter = new JobParameter(new Date());
        parameters.put("currentTime", parameter);

        return new JobParameters(parameters);
    }
}

如您所见,它包含 运行SpringBatchExampleJob() 方法 运行在由将 cron 表达式放入 Scheduled 注释中:

@Scheduled(cron = "0/10 * * * * *")
public void  throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {

此 CRON 异常的确切含义是什么:在我看来,该作业每 10 秒 运行ned,但也许我错了。我如何才能更改此 CRON 表达式以便每晚在 01:00 AM 执行我的工作?

另一个疑问是:目前我有这个空的 JUnit 测试 class:

@SpringBootTest
class UpdateInfoBatchApplicationTests {

    @Test
    void contextLoads() {
    }

}

是否可以直接从 JUnit class 运行 我的工作?我知道这不应该是一个正确的单元测试(也许更像是一个集成测试),但我也想测试我的整个工作而不依赖于 CRON 异常中设置的时间运行使用 JUnit 测试方法。

Spring cron 作业在每个 1:00 am:

@Scheduled(cron = "0 0 1 * * ?")

检查 以了解 Linux 和 Spring 在编写 cron 作业方面的区别。

要测试 cron 作业,请检查 here。您需要测试自己的代码。

此外,您可以使用 Awaitility 库。