본문 바로가기
카테고리 없음

230401 TIL

by hbIncoding 2023. 4. 1.

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

 

Spring batch+Scheduler 구현 해보기

PlayGround, Dalgun NOTE

dalgun.dev

 2)cron 작성법 : https://dev-coco.tistory.com/176

 

[Spring Boot] @Scheduled을 이용해 일정 시간 마다 코드 실행하기

@Scheduled Spring Boot에서 @Scheduled 어노테이션을 사용하면 일정한 시간 간격으로, 혹은 특정 시간에 코드가 실행되도록 설정할 수 있다. 주기적으로 실행해야 하는 작업이 있을 때 적용해 쉽게 사용

dev-coco.tistory.com