1. 스케줄링의 의미
스케줄링이란 작업이 특정 시간 또는 주기에 따라 자동으로 실행되도록 예약하는 기술입니다. 이를 통해 애플리케이션은 정기적인 작업이나 배치 프로세스를 관리하거나, 특정 시간에 이벤트를 자동으로 트리거할 수 있습니다.
2. 애노테이션 입력하기
프로젝트application 자바파일에 @EnableScheduling을 추가합니다.
스케줄링을 사용할 자바파일에 @Component을 추가합니다.
사용할 메서드에 @Scheduled을 추가합니다.
3. 속성
1) fixedDelay
fixedDelay 속성은 밀리초 단위의 값을 받으며, 이전 작업이 종료된 후 지정된 시간만큼 딜레이된 후 다음 작업이 실행됩니다. 예를 들어, @Scheduled(fixedDelay = 5000)으로 설정하면 현재 작업이 끝난 후 5초 후에 다음 작업이 실행됩니다.
2) fixedRate
fixedRate 속성의 값은 밀리초 단위로 작업 간격을 나타냅니다. 예를 들어, @Scheduled(fixedRate = 5000)으로 설정하면 5초마다 작업이 실행됩니다.fixedDelay 와의 차이는 이전 작업의 시작 시간과 상관없이 5초마다 작업이 실행된다는 것입니다. 따라서 이전 작업이 아직 끝나지 않아도 주기적으로 실행되므로, 작업의 수행 시간이 길어지면 작업이 겹칠 수 있는 점에 주의해야 합니다.
3) initialDelay
initialDelay 속성의 값은 밀리초 단위로, 작업을 시작하기 전에 기다리는 시간을 나타냅니다. 예를 들어, @Scheduled(initialDelay = 3000,fixedRate = 5000)으로 설정하면 처음 작업이 실행되기 전에 3초 동안 대기하고, 그 후에는 5초마다 작업이 실행됩니다
4) timeUnit
timeUnit 속성은 java.util.concurrent.TimeUnit 열거형 상수를 사용하여 지정하며, 다양한 시간 단위를 제공합니다. 주로 사용되는 값은 다음과 같습니다:
- TimeUnit.MILLISECONDS: 밀리초
- TimeUnit.SECONDS: 초
- TimeUnit.MINUTES: 분
- TimeUnit.HOURS: 시간
예를 들면 @Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS) 으로 설정하면 5초마다 실행됩니다.
5) Zone
zone 속성은 java.util.TimeZone나 타임존 ID 문자열을 사용하여 지정할 수 있습니다. TimeZone 객체를 직접 지정하거나 타임존 ID 문자열을 사용하여 작업을 해당 시간대에서 실행할 수 있습니다.
예를 들어 @Scheduled(fixedRate = 5000, zone = "America/New_York") 으로 설정하면 뉴욕 시간대로 5초마다 실행됩니다.
6) cron
cron은 @Scheduled 어노테이션에서 사용되는 속성 중 하나로, 크론 표현식을 사용하여 주기적인 작업을 스케줄링하는 데 사용됩니다. 크론 표현식은 시간 기반 작업 스케줄링을 정밀하게 제어하는 방법 중 하나로, 특정 시간, 요일, 월 등을 지정하여 작업을 실행할 시간을 설정할 수 있습니다.
크론 표현식은 다음과 같은 형식으로 구성됩니다:
// 초 0-59 분 0-59 시 0-23 일 1-31 월 1-12 요일 1-7 년(옵션) 1970-2099
// * : 모든 값
// ? : 특정 값 없음
// - : 범위 지정에 사용
// , : 여러 값 지정 구분에 사용
// / : 초기값과 증가치 설정에 사용
// L : 지정할 수 있는 범위의 마지막 값
// W : 월~금요일 또는 가장 가까운 월/금요일
// # : 몇 번째 무슨 요일 2#1 => 첫 번째 월요일
초 (0-59) 분 (0-59) 시 (0-23) 일 (1-31) 월 (1-12 또는 JAN-DEC) 요일 (0-6 또는 SUN-SAT)
예를 들어 @Scheduled(cron = "0 0 * * * *")으로 설정하면 매 시간 정각에 실행합니다.
'JAVA Programming > SpringBoot' 카테고리의 다른 글
[SPRINGBOOT] @PathVariable과 @RequestParam의 차이 (0) | 2024.12.13 |
---|---|
[SPRINGBOOT] ObjectMapper (1) | 2024.12.13 |
[SPRINGBOOT] 인텔리제이 환경설정 (1) | 2024.12.12 |
[SPRINGBOOT] 프로젝트 생성 (0) | 2024.12.12 |