Spring 스케줄링 정리 (@Scheduled, @EnableScheduling)
1️⃣ @Scheduled란?
- Spring에서 메소드를 주기적으로 실행하게 해주는 어노테이션
- 간단한 배치 작업, 로그 기록, 알람, 통계 처리 등에 사용
- 반드시 Spring Bean(
@Component, @Service) 안에서 사용해야 함
2️⃣ 스케줄링 활성화: @EnableScheduling
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@EnableScheduling 없으면 @Scheduled는 동작하지 않음
- 보통 Application 클래스에 선언
3️⃣ @Scheduled 사용 방법
3-1. 고정 주기 실행 (Fixed Rate)
@Scheduled(fixedRate = 5000)
public void fixedRateJob() {}
3-2. 고정 지연 실행 (Fixed Delay)
@Scheduled(fixedDelay = 7000)
public void fixedDelayJob() {}
3-3. 초기 지연 (Initial Delay)
@Scheduled(fixedRate = 10000, initialDelay = 5000)
public void delayedJob() {}
- 앱 시작 후 지정 시간(
initialDelay) 뒤 실행
- 이후
fixedRate 또는 fixedDelay 기준으로 반복
3-4. Cron 표현식
@Scheduled(cron = "0 0/1 * * * ?")
public void cronJob() {}
- 형식:
초 분 시 일 월 요일 [년]
- 자유로운 주기 설정 가능
- 예:
"0 0 9 * * ?" → 매일 9시 실행
4️⃣ 주의사항
- 메소드는 void 반환, 파라미터 없음
- Spring Bean이어야 동작
- 멀티스레드 환경에서는 상태 공유 시 동기화 필요
- 너무 짧은 주기로 실행하면 서버 부하 발생 가능
- Cron 표현식 작성 시 초 단위 포함 확인
5️⃣ 전체 예제
@Component
public class MyScheduler {
@Scheduled(fixedRate = 5000)
public void fixedRateJob() {
System.out.println("Fixed rate job - " + System.currentTimeMillis()/1000);
}
@Scheduled(fixedDelay = 7000)
public void fixedDelayJob() {
System.out.println("Fixed delay job - " + System.currentTimeMillis()/1000);
}
@Scheduled(fixedRate = 10000, initialDelay = 5000)
public void delayedJob() {
System.out.println("Delayed job starts 5 sec after app start");
}
@Scheduled(cron = "0 0/1 * * * ?")
public void cronJob() {
System.out.println("Cron job executed every minute");
}
}