
스프링 배치에서는 패치 작업 실행에 대한 별도 기능을 제공하지 않는다.
그렇기 떄문에 다양한 방법들로 스케쥴링을 구현해야한다.
@EnableScheduling
@EnableBatchProcessing
@SpringBootApplication
public class SpringBatchTutorialApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBatchTutorialApplication.class, args);
}
}
@Component
public class SampleScheduler {
@Autowired
private Job fileReadWriteJob;
@Autowired
private JobLauncher jobLauncher;
@Scheduled(cron = "0 */1 * * * *")
public void helloWorldJobRun() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException {
JobParameters jobParameters = new JobParameters(
Collections.singletonMap("requestTime", new JobParameter(System.currentTimeMillis()))
);
jobLauncher.run(fileReadWriteJob, jobParameters);
}
}
@EnableScheduling : 스프링 스케쥴링을 활용하기 위한 애노테이션
private Job fileReadWriteJob; : 이전에 포스팅에서 생성해놓았던 job을 의존성 주입받아 스케쥴링에서 실행시킨다.
@Scheduled(cron = "0 /1 * * *") : 스프링 스케쥴링을 사용함(crontab과 동일)
private JobLauncher jobLauncher; : 인자가 아닌 배치를 실행시키기 위해서는 JobLauncher를 이용해서 직접 실행시켜줘야함.
jobLauncher.run(fileReadWriteJob, jobParameters); : JobLauncher로 Job을 직접 실행시킨다.
JobParameters jobParameters : JobLauncher의 두번쨰 인자로서 JobParameter가 전달된다.
이 파라미터 값이 없이 동일하게 전달되어 실행되면 스프링배치에서는 똑같은 Job을 계속 실행한다고 인지하기 떄문에 Job 실행이 안되서 시간을 값으로 해서 항상 달라지도록 했다.
스케쥴링을 활용해서 Job을 실행하기 위해서는 JobLauncher를 사용해야한다.