어노테이션 @Scheduled에 대해 알아보자

박성현·2025년 9월 3일

개발중 학습

목록 보기
23/44

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)  // 5초마다 실행
public void fixedRateJob() {}
  • 이전 시작 시점 기준으로 반복 실행

3-2. 고정 지연 실행 (Fixed Delay)

@Scheduled(fixedDelay = 7000)  // 이전 실행 종료 후 7초 뒤 실행
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 * * * ?")  // 매 1분마다 실행
public void cronJob() {}
  • 형식: 초 분 시 일 월 요일 [년]
  • 자유로운 주기 설정 가능
  • 예: "0 0 9 * * ?" → 매일 9시 실행

4️⃣ 주의사항

  1. 메소드는 void 반환, 파라미터 없음
  2. Spring Bean이어야 동작
  3. 멀티스레드 환경에서는 상태 공유 시 동기화 필요
  4. 너무 짧은 주기로 실행하면 서버 부하 발생 가능
  5. 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");
    }
}

profile
개발기록장

0개의 댓글