[스프링배치] 배치 작업 실행(스프링 스케쥴링)

hoyong.eom·2024년 1월 24일

스프링배치

목록 보기
6/12
post-thumbnail

배치 작업 스케쥴 실행

스프링 배치에서는 패치 작업 실행에 대한 별도 기능을 제공하지 않는다.
그렇기 떄문에 다양한 방법들로 스케쥴링을 구현해야한다.

  • crontab
  • 스프링 스케쥴링
  • 쿼츠
  • Spring Cloud Data Flow

예시코드

@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를 사용해야한다.

0개의 댓글