반응형
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 |