关于这个 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 库。
我是 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 * * ?")
检查
要测试 cron 作业,请检查 here。您需要测试自己的代码。
此外,您可以使用 Awaitility 库。