Spring/Java

[Spring][JAVA] Spring에서 주중(월~금)만 스케줄러 실행하기

Devyne 2025. 4. 14. 11:01
반응형

 

 현재 내가 진행하고 관련 프로젝트에서 매 1분 단위로 DB에 데이터 수집하고 있다. 하지만, 예외 사항으로 매 1분씩 데이터 수집이 안될 때가 있다. 즉, 결측이 발생할 수 있다. 이에 대해서 결측 이력을 별도로 DB에 저장하고 있다. 이 저장된 결측 이력을 매일 아침마다 이메일 템플릿을 통해 메일로 전달받는 서비스를 구현하고 운영 중이다. 원래 같은 경우 매일 아침 8시 15분에 실행되게 하였는데 회사에서 주말에 메일 받는 걸 꺼려해서(어차피 보지도 않을 거면서 참)  주중(월~금)에만 메일이 가도록 설정하고자 한다. 


1. ✅ Spring cron 표현식 구조

앞서 Spring cron 표현식에 대해 알아보자. 

Srping에서 사용하는 cron 표현식은 총 6개의 필드로 구성된다.

초 분 시 일 월 요일

 

예를 들면 아래와 같다. 매일 오전 8시 15분에 대한 예시이다.

@Scheduled(cron = "0 15 8 * * *")

 

위에 얘기한 것처럼 처음엔 이렇게 설정되어 있었다. 

 

2. 🔍 Quartz cron 표현식과의 차이

자료를 찾아보다가 Spring 표현식과 Quartz 표현식이 다르다고 해서 정리해 본다. 

항목 Spring cron Quartz cron
필드 수 6개 (초 분 시 일 월 요일) 7개 (초 분 시 일 월 요일 연도)
표현 범위 기본적인 표현 중심 고급 표현(예: L, W, # 등) 지원
사용 위치 @Scheduled 등 Spring 전용 Quartz Job 설정 등 Quartz 전용

 

가장 큰 차이는 필드 수이다. Spring cron 에서는 연도가 빠져있다. 

 

3.🧑‍💻 주중(월~금) 08:15에만 실행하기

이제 주중에만 실행되도록 설정해보자. 

두 가지 방식이 있다. 요일 부분에 문자로 설정할 수 있고, 숫자로 표현할 수 있다. 

 

// 문자로 표현
@Scheduled(cron = "0 15 8 ? * MON-FRI")

// 숫자로 표현
@Scheduled(cron = "0 15 8 ? * 1-5")

 

cron에서 요일 부분에 MON-FRI 처럼 월-금으로 설정하면 된다. 

숫자로도 표현을 할 수 있다. 

일요일은 0 또는 7이고, 월요일부터 1이다. 

실제 예시로 작성하자면 아래와 같다. 

@Scheduled(cron = "0 15 8 ? * 1-5")
// @Scheduled(cron = "0 15 8 ? * MON-FRI")
public void executeJob() {
    // 여기에 실행할 작업 로직 작성
}

지금까지 주중 스케줄러 설정에 대해 알아보았다. 

참고로 CronMaker 이 사이트는 cron 테스트를 할 수 있는 사이트이다.  그리고 내가 원하는 조건에 맞게 cron 값 생성도 할 수 있다.  약간 오류?(가 있지만 그래도 cron 값 맞게 설정했는지 확인할 때 참고한다.

 

다음엔 자바의 Mail Sender 관련해서 메일 전송 서비스에 대해 작성해볼까 한다. (언제 작성할지는...)

반응형