본문 바로가기
웹개발지식쌓기

[오류] cron 표현식 오류 - Encountered invalid @Scheduled method 'excute': For input string: "6L"

by developer_j 2022. 6. 17.
728x90
반응형

크론 표현식은 배치작업 소스를 만들 때 마다 찾아 본다 ㅋㅋㅋㅋ 볼 때마다 낯설다..

매주 금요일 오후 3시 30분에 발송하는 배치 소스를 @Scheduled 어노테이션을 이용해서 개발 중인데, 개발 중에 발견한 사항들을 적어본다.

  1. 0~6, SUN~SAT 요일 숫자 매칭
  2. W, L의 단일 스트링 사용 오류

1. 0~6, SUN~SAT 요일 숫자 매칭

거의 대부분의 문서에서 요일과 관련하여 0~6, SUN~SAT
이라고 되어있는데 그래서 이 두개가 같다는 건지
 0  1   2   3   4   5   6 인데
일 월 화  수 목 금 토 인건지
그렇다면 왜 많은 문서들이 금요일을 6이라고 표현하고 있는건지
넘나 헷갈려서 테스트를 해봤다.

오늘은 🔥금요일🔥이고, IBM 사이트에서 복붙해온 금요일 크론 표현식을 사용했는데 함수 실행 안됨.

@Scheduled(cron = "0 26 16 ? * 6")	//실패
public void excute() {
    System.out.println("today is Friday");
}

출처 : https://www.ibm.com/docs/ko/urbancode-release/6.1.0?topic=interval-cron-expressions-defining-frequency

그래서 6이아닌 5를 넣고 돌렸더니 함수 실행됨.

@Scheduled(cron = "0 26 16 ? * 5")	//성공
public void excute() {
    System.out.println("today is Friday");
}

결론은 이거같다.

0,7   1  2   3  4   5  6 
일   월 화 수 목 금 토

2. W, L의 단일 스트링 사용 오류

이전에 배치 개발 했을 때 발견했던 건데, 지금 쓴다.

매월 마지막 금요일 오전 10:15 ==>  "0 15 10 ? * 6L" 라고 나와있는데, 내 개발 환경에서는 작동하지 않는다.

아직 이유는 못찾았다. 단순히 3.x 버전의 스프링에서는 단일 스트링 사용한 크론표현식 개발이 되지 않는다고만 인지하고 있을 뿐이다.

@Scheduled(cron = "0 45 16 ? * 6L")	//실패
public void excute() {
    System.out.println("today is Friday");
}

근데 그러면 MON, FRI 같은 요일 스트링도 입력되지 않아야 하는거 아냐..?
얘네는 왜 되는거람,, 진짜 모르겠다 ㅋㅋㅋㅋㅋㅋㅋㅋ
나중에 알게되면 이 글을 수정하러 와야겠다.


추가로, 크론표현식에 사용되는 요일, 시간은 어느 나라를 기준으로 하는 건지 궁금하다.

혹시 아시는 선배님들이 이 글을 보신다면 정보 좀 주세요... :)

728x90
반응형