HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🧚
[1기]최종 프로젝트 데브코스
/
📜
[팀13] 사각사각 ✏️
/
🎊
기술 문서
/
🕔
Scheduler
🕔

Scheduler

 

Scheduler

  • 일정한 시간간격 또는 일정한 시각에 특정 로직을 돌리기 위해서 사용한다.
  • 추가적인 의존성 주입이 필요없다.
  • @Scheduler 만으로 가능하다.
 
 
  1. Scheduler를 사용하기 위해 @EnableScheduling 를 추가해주면 된다.
@EnableScheduling @SpringBootApplication() public class MonthSubApplication { public static void main(String[] args) { SpringApplication.run(MonthSubApplication.class, args); } }
 
  1. 사용하고자 하는 Method에 @Scheduled 를 붙여주어 사용할 수 있다.
    1. Method 는 반드시 void의 retuen 타입이어야한다.
    2. Method에는 Parameter를 가질 수 없다.
    3. cron or fixed~ 로 자신이 원하는 주기마다 설정이 가능하다.
@Component public class Scheduler { private final ScheduledHandler seriesScheduledHandler; private final Logger logger = LoggerFactory.getLogger(getClass()); public Scheduler(ScheduledHandler seriesScheduledHandler) { this.seriesScheduledHandler = seriesScheduledHandler; } @Scheduled(cron = "0 0/10 * * * *") //cron 주기마다 아래 method가 실행된다. public void changeSeriesStatus() { seriesScheduledHandler.changeSeriesStatus(); } }
 

Scheduler의 비동기(Async) 처리

  • Default로 Scheduler는 동기처리를 기본으로 한다.
  • 단일 thread 로 동작하기 때문에 만약 원하는 주기마다 실행이 되지 않을 수 있다.
  • 이를 해결하기 위해 비동기적으로 스레드를 구성해준다.
 
  1. Async를 사용하기 위해 @EnableAsync를 추가해준다.
@EnableAsync @EnableScheduling @SpringBootApplication() public class MonthSubApplication {}
 
  1. 다중 Thread를 위한 Thead Pool 설정을 해주도록 한다.
    1. setPoolSize( pool 사이즈 ); 로 몇 개의 스레드로 동작할지를 설정해준다.
@Configuration public class SchedulerConfig implements SchedulingConfigurer { private final int POOL_SIZE = 5; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.setPoolSize(POOL_SIZE); threadPoolTaskScheduler.initialize(); taskRegistrar.setTaskScheduler(threadPoolTaskScheduler); } }
 
  1. 마지막으로 사용하고자 하는 Scheduled Method에 @Async 를 붙여주면 된다.
@Async //비동기 처리를 위한 어노테이션 추가 @Scheduled(cron = "0 0/10 * * * *") //cron 주기마다 아래 method가 실행된다. public void changeSeriesStatus() { seriesScheduledHandler.changeSeriesStatus(); }
 
 

+) CRON 주기 설정

스프링부트 스케줄 설정 법 & Cron 주기설정
스프링 스케줄 설정 법 클래스 위에 @EnableScheduling 어노테이션을 설정 해 줍니다. 그리고 실제 사용할 자바 매소드 위에 예시) 이런식으로 설정해 줍니다. 결과: 이렇게 아래처럼 매분 10초마다 스케줄러 도는것을 볼 수 있습니다. CRON 표현식 스케줄러의 경우 매소드위에 @Scheduled(cron = "10 * * * * *") 이런식으로 어노테이션을 작성해 줍니다.
스프링부트 스케줄 설정 법 & Cron 주기설정
https://itworldyo.tistory.com/40
스프링부트 스케줄 설정 법 & Cron 주기설정
 
 
 
개요를 설명하고 →
 
 
저희 서비스에서는