[테스트 내용]
스프링부트에서 cron을 사용해 9시에서 18시까지 1시간 마다 스케줄이 돌게 하려면 어떻게 해야 할까?
내가 생각한 내용은
1. cron="0 0/59 * * * *"
2. cron="0 0 9-18/1 * * *"
[테스트 코드]
/**
* 실행주기: 60분
* 실행횟수: 1
* 실행시작: 09시~18시
* ----------------
*/
@Scheduled(cron="0 0/59 * * * *")
public void TEST_TIME() {
// ------------------------------------------------------------
// #00.기본로그-시작
logger.debug("[][{}]", "");
// ------------------------------------------------------------
System.out.println("1시간 주기 테스트 시작");
System.out.println(new Date().toString());
System.out.println("1시간 주기 테스트 끝");
// ------------------------------------------------------------
// #99.기본로그-종료
logger.debug("[][{}]", "");
// ------------------------------------------------------------
}
/**
* 실행주기: 60분
* 실행횟수: 1
* 실행시작: 09시~18시
* ----------------
*/
@Scheduled(cron="0 0 9-18/1 * * *")
public void TEST_TIME2() {
// ------------------------------------------------------------
// #00.기본로그-시작
logger.debug("[][{}]", "");
// ------------------------------------------------------------
System.out.println("1시간 주기 테스트2 시작");
System.out.println(new Date().toString());
System.out.println("1시간 주기 테스트2 끝");
// ------------------------------------------------------------
// #99.기본로그-종료
logger.debug("[][{}]", "");
// ------------------------------------------------------------
}
[결과]
[22-11-16 11:59:00.009][scheduler-7] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
1시간 주기 테스트 시작
Wed Nov 16 11:59:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 11:59:00.009][scheduler-7] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
[22-11-16 12:00:00.004][scheduler-11] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
[22-11-16 12:00:00.010][scheduler-19] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:735] - [][]
1시간 주기 테스트 시작
Wed Nov 16 12:00:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 12:00:00.023][scheduler-11] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
1시간 주기 테스트2 시작
Wed Nov 16 12:00:00 KST 2022
1시간 주기 테스트2 끝
[22-11-16 12:00:00.023][scheduler-19] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:742] - [][]
[22-11-16 12:59:00.052][scheduler-3] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
1시간 주기 테스트 시작
Wed Nov 16 12:59:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 12:59:00.052][scheduler-3] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
[22-11-16 13:00:00.003][scheduler-6] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:714] - [][]
1시간 주기 테스트 시작
Wed Nov 16 13:00:00 KST 2022
1시간 주기 테스트 끝
[22-11-16 13:00:00.006][scheduler-6] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME:721] - [][]
[22-11-16 13:00:00.052][scheduler-16] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:735] - [][]
1시간 주기 테스트2 시작
Wed Nov 16 13:00:00 KST 2022
1시간 주기 테스트2 끝
[22-11-16 13:00:00.052][scheduler-16] DEBUG: ntree.batch.controller.NtreeBatchController [TEST_TIME2:742] - [][]
[결론]
1. cron="0 0/59 * * * *" 은 59분에 한번 나오고 00분에 한번 더 나와서 최종으로 2번씩 나오는데
2. cron="0 0 9-18/1 * * *" 는 00분에만 최종으로 1번씩 나와서
원하는 결과를 더욱 충족 시킨다.