본문 바로가기
Programming/Spring

Cron을 이용한 Scheduling 방법

by d-e-v-j 2024. 8. 19.
반응형

Spring Framework 에서 일정한 시간 간격으로 작업을 수행하기 위해 스케쥴링 기능을 사용할 수 있다.

그 중에서도 Cron 표현식을 이용한 스케쥴링은 작업시간을 유연하게 지정할 수 있어서 많이 활용된다.


1. Spring 에서 스케줄링 활성화

Spring 에서 스케줄링 기능을 사용하려면 먼저 @EnableScheduling 어노테이션을 통해 스케쥴링 기능을 활성화 해야 한다. 이 어노테이션은 보통 @Configuration 클래스에 추가 된다.

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@EnableScheduling
public class SchedulingConfig {
    // 스케줄링이 필요한 Bean 설정이 이 클래스에 포함될 수 있습니다.
}

 

2. Cron 표현식을 사용한 스케줄링

Spring 에서 Cron 표현식을 사용하려면 @Scheduled 어노테이션을 사용하면 된다.

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    @Scheduled(cron = "0 0/5 * * * ?")
    public void performTask() {
        System.out.println("Task executed at: " + new java.util.Date());
    }

    @Scheduled(cron = "0 0 0 * * ?")
    public void performDailyTask() {
        System.out.println("Daily task executed at midnight: " + new java.util.Date());
    }
}

 

Cron 표현식

Cron은 6개의 표현식으로 구성된다.

1. 초: 0~ 59

2. 분: 0~59

3. 시: 0~23

4. 일: 1~31

5. 월: 1~12 or JAN ~ DEC

6. 요일: 0~6 or SUN~SAT

 

Cron 예시

0 0/5 * * * ? 	//매 5분마다 실행

0 0 0 * * ?	//매일 자정에 작업 실행

0 0 * * * ? 	// 매 시간 0분에 실행

0 0 9 * * ? 	// 매일 오전 9시 실행

0 0 9 ? * MON 	// 매주 월요일 오전 9시 실행

0 0 0 1 * ? 	// 매월 1일 자정에 실행

0 0/30 8-17 * * MON-FRI // 평일오전 8시에서 오후 5시까지 매 30분 마다 실행

 

3. 스케줄링 작업의 비동기 처리

스케줄링 작업을 비동기로 처리하고 싶으면 @Async 어노테이션을 사용하면 된다. 그러면 별도의 스레드에서 작업이 실행된다.

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Configuration
@EnableScheduling
@EnableAsync
public class AsyncSchedulingConfig {
}

@Component
public class AsyncScheduledTasks {

    @Async
    @Scheduled(cron = "0 0/5 * * * ?")
    public void performAsyncTask() {
        System.out.println("Async Task executed at: " + new java.util.Date());
        // 비동기 작업 코드
    }
}

주로 Batch 프로그램을 돌리때 많이 사용한다.

많이 사용하는데도 가끔 Cron 식이 초 분 시 일 월 요일 .. 이게 헷갈릴 때가 있다.

외워서 틀리는 일이 없도록 하자 ㅎ


 

728x90
반응형
LIST

'Programming > Spring' 카테고리의 다른 글

Spring 동시성 제어를 위한 트랜잭션 관리  (1) 2024.11.26
Spring Batch  (0) 2024.11.23
Spring Bean Lifecycle  (1) 2024.11.20
[Spring] Swagger에 대해서  (1) 2024.09.05
Maven 과 Gradle  (0) 2024.07.21