본문 바로가기
Backend 🧦

[Spring] 스프링 스케줄러(Spring Scheduler)

by 서니서닝 2023. 11. 14.
728x90

특정 테이블이 최근 한달의 데이터만을 가지고 있게 하고 싶어서 찾아본 내용!

참고로 나는 MyBatis를 사용해서 Delete 메서드를 따로 구현한 상태로 진행했다.


 

스프링 스케줄러는 스프링 프레임워크에서 제공하는 스케줄링 기능을 지원하는 모듈이다.

 

백그라운드에서 주기적으로 작업을 수행하거나 예약된 시간에 작업을 실행할 수 있다.

이를 통해 일정한 간격 또는 특정 시간에 작업을 자동으로 처리할 수 있으며, 작업 예약 및 관리를 간편하게 할 수 있다.

 

사용방법은 간단하다.

 

1. 의존성 추가(Maven 또는 Gradle 설정)

spring-boot-starter 혹은 spring-context 포함된 스케줄링 모듈을 사용한다.

그를 위해 아래와같이 의존성을 추가해준다.

<!-- Maven -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

 

// Gradle
implementation 'org.springframework.boot:spring-boot-starter'

 

 

2. 스케줄링 활성화 설정

스케줄링을 사용하기 위해 설정 클래스에 @EnableScheduling 어노테이션을 추가한다.

@SpringBootApplication
@EnableScheduling
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

 

3. @Scheduled 어노테이션 설정

주기적으로 행해져야할 메서드에 @Scheduled 어노테이션을 추가한다.

아래의 코드는 @Component를 썼지만, @Service에 있는 메서드에 바로 @Scheduled를 붙여써도 무방하다.

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

@Component
public class MyScheduledTask {

    @Scheduled(cron = "0 0 0 * * ?") // 매일 자정에 실행
    public void myTask() {
        System.out.println("Scheduled task executed.");
    }
}

 

나는 매일 자정에 실행되길 바랐기 때문에 저런 형식을 사용하였다.

크론 문법인데

출처 : https://madplay.github.io/post/a-guide-to-cron-expression

위와 같은 방식으로 사용한다.

 

그 외에도 

@Scheduled(fixedRate = 5000) // 5초마다 실행
  • fixedRate: 이전 작업의 종료와 상관없이 고정된 간격으로 작업을 수행
  • fixedDelay: 이전 작업이 종료된 후 고정된 간격으로 작업을 수행
  • initialDelay: 최초 실행까지의 지연 시간을 설정
  • cron: 크론 표현식

이런 방식으로 시간을 설정할 수 있다.

 

📖 reference

[Linux] Crontab

728x90

댓글