728x90
@Scheduled 란❓
Spring Boot에서 @Scheduled 어노테이션은 특정 메서드를 주기적으로 실행할 수 있게 해주는 유용한 기능입니다. 주기적인 데이터 백업, 로그 정리, 알림 전송 같은 반복 작업을 자동화하여 개발자가 손쉽게 관리할 수 있도록 지원합니다.
이는 백그라운드에서 반복적으로 수행해야 하는 작업을 간편하게 설정할 수 있어 유지 관리와 효율성에 큰 도움이 됩니다.
@Scheduled 설정 방법
@EnableScheduling 설정
- 스케줄링 기능을 사용하려면 Spring Boot 애플리케이션이나 설정 클래스에 @EnableScheduling을 추가해야 합니다. 이 어노테이션이 있어야 @Scheduled가 활성화됩니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SchedulingApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulingApplication.class, args);
}
}
@Scheduled 주요 속성
1. fixedRate
- fixedRate는 작업이 시작된 시점을 기준으로 일정 시간 간격으로 메서드를 반복 실행합니다.
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 5000) // 5초마다 실행
public void runEveryFiveSeconds() {
System.out.println("5초마다 실행되는 작업입니다.");
}
}
- 이전 작업이 끝나기 전에 새 작업이 실행될 수 있습니다.
- 작업 시간이 fixedRate 간격보다 길면 실행 시점이 겹칠 수 있습니다.
2. fixedDelay
@Scheduled(fixedDelay = 5000) // 이전 작업이 끝난 후 5초 후에 실행
public void runAfterFiveSecondsDelay() {
System.out.println("이전 작업이 완료된 후 5초 뒤에 실행되는 작업입니다.");
}
- fixedDelay는 이전 작업이 끝난 시점으로부터 일정 시간 후에 새 작업을 실행합니다.
- 작업이 종료된 후 일정 시간 동안 대기한 뒤 실행하므로, 작업이 겹치는 상황을 방지할 수 있습니다.
3. initialDelay
@Scheduled(fixedRate = 5000, initialDelay = 2000) // 2초 뒤 첫 실행 후 매 5초마다 실행
public void runWithInitialDelay() {
System.out.println("2초 뒤 첫 실행되고 이후 5초마다 반복됩니다.");
}
- initialDelay는 애플리케이션 시작 후 첫 작업 실행을 지연시키는 속성으로, fixedRate 또는 fixedDelay와 함께 사용됩니다.
4. cron
@Scheduled(cron = "0 0 0 * * ?") // 매일 자정에 실행
public void runAtMidnight() {
System.out.println("매일 자정에 실행됩니다.");
}
- cron 속성은 cron 표현식을 사용해 더 복잡한 주기 설정을 지원합니다.
- cron 표현식은 주기적인 작업을 세밀하게 조정할 수 있어 유연하게 스케줄링을 설정할 수 있습니다.
- cron 표현식은 초 분 시 일 월 요일 순으로 구성됩니다.
cron 표현식 예시
표현식 | 설명 |
0 0 * * * | 매 정시마다 실행 |
0 0 12 * * * | 매일 정오에 실행 |
0 0 0 * * 0 | 매주 일요일 자정에 실행 |
0 0 0 1 * * | 매월 1일 자정에 실행 |
- 0: 특정 시점, 즉 '정확히 0초' 또는 '정확히 0분'을 의미합니다.
- 예를 들어, "0 * * * * *"는 매 정각(0초)에 실행하라는 의미이며, 00분 00초, 01분 00초와 같은 방식으로 정확히 분의 시작점에 실행됩니다.
- *: 해당 필드의 모든 값이 가능함을 나타냅니다.
- 예를 들어, "* * * * * *"는 초마다 실행을 의미하고, "0 * * * * *"는 매 1분마다 실행을 의미합니다.
@Scheduled 예시
@Component
public class MaintenanceTasks {
@Scheduled(cron = "0 0 3 * * ?") // 매일 새벽 3시에 데이터 백업
public void backupData() {
System.out.println("데이터 백업 실행");
// 백업 로직
}
@Scheduled(cron = "0 0 0 * * SUN") // 매주 일요일 자정에 로그 정리
public void cleanupLogs() {
System.out.println("로그 정리 실행");
// 로그 정리 로직
}
}
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.10.23 - Spring boot Swagger 주요 어노테이션 (0) | 2024.10.23 |
---|---|
[TIL, 일일 회고] 2024.10.22 - S3 확장자 에러 처리하기 (0) | 2024.10.22 |
[TIL, 일일 회고] 2024.10.20 - LocalDate로 정확한 날짜 구하기 (0) | 2024.10.20 |
[TIL, 일일 회고] 2024.10.19 - 데이터베이스 스키마 추가하기 (0) | 2024.10.19 |
[TIL, 일일 회고] 2024.10.18 - 서버 사이드 렌더링 적용하기 (0) | 2024.10.18 |