spring.batch.job.name
값을 지정해주고, 실행 argument로 --job.name=Job1
과 같이 지정하여 실행하면 별도의 설정 없이 원하는 job을 cli상 argument로 지정하여 실행하는 게 가능하다고 하고, 별도의 지정을 해주지 않으면 Bean으로 등록된 모든 job들이 실행된다고 하는데, 아무리 실행시켜봐도 JOB_INSTANCE 테이블에 아무 데이터도 쌓이지 않았다.(@EnableBatchProcessing라는 어노테이션이 없음 && DefaultBatchConfiguration이 존재하지 않음)
일때만 경우만 BatchAutoConfiguration이 활성화 된다.@ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, annotation = EnableBatchProcessing.class)
public class BatchAutoConfiguration {
/** 이하 생략 */
public class BatchAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.batch.job", name = "enabled", havingValue = "true", matchIfMissing = true)
public JobLauncherApplicationRunner jobLauncherApplicationRunner(JobLauncher jobLauncher, JobExplorer jobExplorer,
JobRepository jobRepository, BatchProperties properties) {
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(jobLauncher, jobExplorer, jobRepository);
String jobNames = properties.getJob().getName();
if (StringUtils.hasText(jobNames)) {
runner.setJobName(jobNames);
}
return runner;
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.batch.job", name = "enabled", havingValue = "true", matchIfMissing = true)
public JobLauncherApplicationRunner jobLauncherApplicationRunner(JobLauncher jobLauncher, JobExplorer jobExplorer,
JobRepository jobRepository, BatchProperties properties, Collection<Job> jobs) {
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(jobLauncher, jobExplorer, jobRepository);
String jobNames = properties.getJob().getName();
if (StringUtils.hasText(jobNames)) {
if (jobs.stream().map(Job::getName).noneMatch(s -> s.equals(jobNames))){
throw new IllegalArgumentException(jobNames + "는 등록되지 않은 job name입니다. job name을 확인하세요.");
}
runner.setJobName(jobNames);
}
return runner;
}
새로 등록하는 김에, 기존 BatchAutoConfiguration에 등록된 jobLauncherApplicationRunner 빈 정의 코드에, 존재하지 않는 jobname을 요청하는 경우 예외를 반환하는 코드도 추가하였다.
이후 아래와 같이 job name을 지정하고 job Parameter를 정의하여 실행하니, 잘 실행되는 것을 확인할 수 있었다.
성공 실행 로그
2023-10-23T16:05:33,993 INFO [restartedMain] o.s.b.c.l.s.SimpleJobLauncher$1: Job: [SimpleJob: [name=shortsStatisticsJob]] completed with the following parameters: [{'requestDate':'{value=20231023134022, type=class java.lang.String, identifying=true}'}] and the following status: [COMPLETED] in 73ms
@ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, annotation = EnableBatchProcessing.class)
어노테이션과 그 옵션 값들의 의미를 알았다면, 코드만 보고 답을 찾을 수 있었을 것이다. 결국 구글링(https://europani.github.io/spring/2023/06/26/052-spring-batch-version5.html)을 통해 원인을 찾아낼 수 있었지만.결국 내가 습득한 지식과 해결한 방식 모두 전부 구글링을 통해 나오는 자료들에 있었지만,
내 프로젝트의 어떤 점이 문제인지 파악하고, 그를 해소하기 위해 적용하는 데에 많은 시간을 쏟았다.
이 시간을 줄이는 것이 <문제 해결 능력이 뛰어난> 개발자가 되기 위한 관건일 것 같다..
문제를 해결하는 과정을 계속해서 회고하고 고찰을 적어보는 습관을 길러야겠다.
https://europani.github.io/spring/2023/06/26/052-spring-batch-version5.html