반응형
Spring Scheduler는 스케줄링 작업을 효과적으로 관리하고 실행하기 위한 방법입니다.
Scheduling 활성화 설정
Spring Scheduler는 `@Scheduled` 어노테이션을 붙여 사용할 수 있습니다.
`@Scheduled`를 사용하기 위해서는 `@EnableScheduling` 어노테이션을 명시해주어 Scheduling을 활성화할 수 있습니다. `@EnableScheduling`을 명시하는 방법에는 두 가지가 있습니다.
방법1: @SpringBootApplication이 위치한 클래스 위에 명시하는 방법
@EnableScheduling
@SpringBootApplication
public class CovidHospApplication {
public static void main(String[] args) {
SpringApplication.run(CovidHospApplication.class, args);
}
}
방법2: @Scheduled를 적용할 클래스 위에 명시하는 방법
@EnableScheduling
public class HospDataDownload {
@Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul")
public void download() {
// 스케줄링 작업 코드
}
// ...
}
@Scheduled 어노테이션 속성
주요 속성으로는 cron, fixedRate/fixedDelay, zone이 있습니다.
cron
`cron` 속성을 사용하여 언제 작업을 실행할지 정의할 수 있습니다.
@Scheduled(cron = "30 5 * * * *") // 5분 30초
@Scheduled(cron = "0 * 12 * * *") // 12시 0~59분까지 매분
@Scheduled(cron = "0 0/5 * * * *") // 0분에 시작해서 5분마다
@Scheduled(cron = "0 0 2/1 * * *") // 2시에 시작해서 1시간마다
@Scheduled(cron = "0 0/5 3 * * *") // 3시 0분부터 5분마다
@Scheduled(cron = "0 0 12-17 ? * SUN,SAT") // 일,토 12시부터 17시까지 정시마다
@Scheduled(cron = "0 30 12 28 * ?") // 아무요일, 매월 28일 12시 30분
- 초, 분, 시, 일, 월, 주, (년)을 지정해 스케줄러를 동작시킵니다.
- 초: 0 ~ 59
- 분: 0 ~ 59
- 시: 0 ~ 23
- 일: 1 ~ 31
- 월: 1 ~ 12
- 주: 0 ~ 6 (일요일부터 토요일까지)
- 년: 1970 ~ 2099 (생략 가능)
fixedRate 및 fixedDelay
- `fixedRate`: 코드가 실행되고 고정된 간격마다 실행됩니다. 이전 작업이 완료되지 않으면 다음 작업이 실행되지 않습니다.
- `fixedDelay`: 해당 코드가 실행되고 끝난 후 지정 시간 이후 다음 작업이 실행됩니다.
@Scheduled(fixedRate = 1000) // 1초마다
@Scheduled(fixedDelay = 1000) // 이전 작업이 완료된 후 1초 후
zone
스케줄러를 실행할 타임 존을 지정합니다. 기본값은 Local 시간대입니다.
@Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul")
반응형
'Spring Boot' 카테고리의 다른 글
Spring Boot Validation @NotNull, @NotEmpty, @NotBlank 차이점 (0) | 2023.10.24 |
---|---|
SpringBoot에서 JUnit5로 효율적인 단위 테스트 작성하기, Assertions로 값 검증하기 (0) | 2023.10.04 |
SpringBoot에서 MockMvc을 활용한 컨트롤러, HTTP 요청 테스트 방법 (0) | 2023.10.04 |
Spring Boot Log 남기기: Logback을 사용한 로그 전략 (0) | 2023.01.19 |
Spring Boot Hibernate Validator와 Data Binding: 데이터 유효성 검사와 데이터 연결 (0) | 2022.08.31 |