1. Spring Scheduler 설정(배치와 엮어서)
1)Bulid.gradle에 dependency 추가
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-quartz'
testImplementation 'org.springframework.boot:spring-boot-batch-test'
2)application에 annotation 설정
@EnableScheduling
@EnableBatchProcessing
@SpringBootApplication
public class GodoksApplication {
public static void main(String[] args) {
SpringApplication.run(GodoksApplication.class, args);
}
}
3)application.properties 작성
spring.batch.jdbc.initialize-schema=always
spring.batch.job.enabled=false
- spring.batch.jdbc.initialize-schema : 수동 생성은 쿼리 복사 후 직접 실행하는 방법이며, 자동 생성은 application.properties 파일에 설정하는 방법, 개발시에는 자동 생성/ 운영시에는 수동 생성 권장
- ALWAYS : 스크립트를 항상 실행, RDBMS설정이 되어있을 경우 내장 DB보다 우선적으로 실행
- EMBEDDED : 내장 DB 일 때만 실행되며 스키마가 자동 생성( 기본값)
- NEVER : 스크립트 미 실행, 내장 DB 일 경우 스크립트 생성 안되서 오류 발생
2. Spring Scheduler 작성
1)코드 작성
@Slf4j
@Component
public class BatchScheduler {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private BatchConfig batchConfig;
@Scheduled(cron = "0 0/1 * * * *")
public void runJob(){
//Job parameter 설정
Map<String, JobParameter> confMap = new HashMap<>();
confMap.put("time", new JobParameter(System.currentTimeMillis()));
JobParameters jobParameters = new JobParameters(confMap);
try{
jobLauncher.run(batchConfig.job(), jobParameters);
}catch (JobExecutionAlreadyRunningException | JobInstanceAlreadyCompleteException | JobParametersInvalidException
| org.springframework.batch.core.repository.JobRestartException e){
log.error(e.getMessage());
}
}
}
- 위와 같이 작성하여 batchConfig에 작성한 job이라는 잡을 수행시켜준다.
- @Scheduled에 해당하는 메서드를 실행해준다.
- cron 값은 순서 대로 "초 분 시 일 월 요일"으로 계산된다.
- 요일의 경우 0:일요일, 1:월요일 .... 6:토요일 이다.
- 예시는 다음와 같다.
- (cron = "0 0 18 * * *") : 매일 18시에 시행
- (cron = "0 0 14 10,20 * ?") : 매달 10일,20일 14시에 실행
- (cron = "0 0 22 L * ?") : 매일 마지막날 22시에 실행
- (cron = "0 0 0/1 * * *") : 1시간 마다 실행
- (cron = "0 0/5 9,18 * * *") : 매일 9시~9시55분, 18시~18시55분 사이에 5분 간격으로 실행
- (cron = "0 0/5 9-18 * * *") : 매일 9시~18시55분 까지 5분 간격으로 시행
- (cron = "0 30 10 1 * *") : 매달 1일 10시 30분에 진행
- (cron = "0 30 10 ? 3 1-5") : 매년 3월내 월-금 10시30분에 실행
- (cron = "0 30 10 ? * 6L") : 매달 마지막 토요일 10시30분에 실행
- (cron = "0 5,17,38,49 * * * *") : 5분,17분,38,49분에 실행
3. 참조
1)Scheduler 작성 : https://dalgun.dev/blog/2019-10-30/spring-batch
2)cron 작성법 : https://dev-coco.tistory.com/176