728x90
스프링 스케줄러 적용하기
매일 새벽 세시에 회원 테이블을 조회해서 마지막 로그인 시점이 6개월보다 이전이면 휴면 계정으로 처리하는 프로세스를 작성해 보자.
1. 스프링 스케줄러 설정
- 스프링 부트 프로젝트에 스프링 스케줄러를 사용하기 위해 별도의 의존성 추가가 필요하지 않다.
- @EnableScheduling 어노테이션을 메인 클래스나 설정 클래스에 추가하여 스케줄러를 활성화한다.
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableScheduling
public class SchedulerConfig {
// 스케줄러 관련 설정
}
2. 스케줄링할 작업 구현
- @Scheduled 어노테이션을 사용하여 휴면 계정을 확인하고 처리할 작업을 구현한다.
- 다음은 매일 새벽 3시에 실행되는 예시 코드다.
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class InactiveUserTask {
@Scheduled(cron = "0 0 3 * * ?") // 매일 새벽 3시에 실행
public void checkInactiveUsers() {
// 휴면 계정 처리 로직
}
}
3. application.yml에서 스케줄러 사용 여부 관리 (선택 사항)
- 스케줄러를 활성화하거나 비활성화하는 옵션을 application.yml 파일에서 관리할 수 있다.
scheduler:
checkInactiveUser: true
4. 조건부 스케줄링 (선택 사항)
- application.yml에서 설정한 값에 따라 작업의 실행 여부를 결정할 수 있다.
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class InactiveUserTask {
@Value("${scheduler.checkInactiveUser}")
private boolean isCheckInactiveUserScheduled;
@Scheduled(cron = "0 0 3 * * ?")
public void checkInactiveUsers() {
if (isCheckInactiveUserScheduled) {
// 휴면 계정 처리 로직
}
}
}
5. 마무리
이렇게 스프링 스케줄러를 사용하면, 간편하게 주기적인 작업을 스케줄링할 수 있다. 복잡한 설정 없이 몇 가지 어노테이션과 속성만으로도 충분히 강력한 스케줄링 기능을 구현할 수 있어 개발자의 생산성을 높일 수 있다.
이와 동일한 프로세스지만 Quartz를 사용해서 실행하는 방법은 다음 포스팅에 작성해 보겠다.
[Spring Boot] Spring Batch, Spring Scheduler, Quartz의 차이
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] AOP를 활용한 로깅 구현: @EnableAspectJAutoProxy와 사용자 정의 Aspect 클래스 비교 가이드 (1) | 2023.11.13 |
---|---|
[Spring Boot] Quartz 적용하기 (2) | 2023.11.11 |
[Spring Boot] Spring Batch, Spring Scheduler, Quartz의 차이 (0) | 2023.11.11 |
[Spring Boot] Spring Boot 3.X 버전에 Swagger 3 버전 적용하기 (1) | 2023.11.10 |
[Spring Boot] Spring Boot에서 Feign 클라이언트 사용하기(@FeignClient 사용 가이드) (2) | 2023.11.09 |