Java/Spring Boot

Scheduler 관련 내용정리

amungstudy 2024. 6. 3. 19:36

Scheduler

Scheduler를 사용하면 정해진 시간마다 특정 동작을 수행할 수 있다

Scheduler를 구현하기 위한 대표적인 방법 2가지

  1. Spring Framework에서 제공하는 Scheduler
  2. Quartz 라이브러리

1. Spring Framework에서 제공하는 Scheduler

적용 시 장점:

  • Scheduler는 기본적으로 Spring Boot에 포함되어 있기 때문에 추가적으로 Gradle에 의존성을 추가할 필요없이 Application 클래스에 @EnableScheduling를 추가하여 Scheduler를 활성화할 수 있다
  • 스케줄러를 사용하면 직접 스레드를 관리하지 않아도 된다

2. Quartz 라이브러리

적용 시 장점 : Spring Framework의 Scheduler보다 정교하게 Job Scheduling을 설정할 수 있다.

  • scheduler간의 clustering기능 제공
  • shceduler 실패에 대한 후처리 기능 제공
  • JVM 종료 이벤트를 캐치하여 스케줄러에게 종료를 알려주는기능 제공
  • 여러가지 plugin 제공

SpringBoot에서 Scheduler 구현하기

 

1. Application 클래스에 @EnableScheduling를 추가하여 Scheduler를 활성화

2. Controller 클래스의 Scheduler 적용할 메소드에 @Scheduled 어노테이션 추가

주의할 점 :  @Scheduled가 추가된 메소드는 파리미터와 반환값을 사용할 수 없다

 

@Scheduled의 속성

- fixedDelay : 메소드의 실행이 끝난 시간을 기준으로 하여, 설정된 밀리세컨드 간격마다 실행

- fixedRate : 메소드의 실행이 시작하는 시간을 기준으로 하여, 설정된 밀리세컨드 간격마다 실행, 이전 작업이 완료될때까지 다음 작업은 실행되지 않음

- initialDelay : 설정된 밀리세컨드 시간 후부터 fixedDelay 간격마다 실행

- cron :  Cron 표현식을 사용하여 설정한 시간에 실행, zone(타임존)과 함께 사용

 

Cron 표현식

cron = "* * * * * *" 형태로 작성한다

첫번째 값부터 초(0~59), 분(0~59), 시(0~23), 일(1~31), 월(1~12), 요일(0~6)을 나타낸다.

 

예시)

0/10 * * * * ? : 10초마다 실행(0초 시작)

0 * * * * ? : 매분 0초에 실행(1분마다 실행)

0 0/5 * * * ? : 5분마다 실행(0분 시작)

 


SpringBoot에서 비동기 Scheduler 구현하기

 

SimpleAsyncTaskExecutor 사용하면 스레드를 재사용하지 않고, 매번 새로운 스레드를 생성해서 비효율적이다.

 

ThreadPoolTaskExecutor는 auto-configured된 경우 스레드 풀은 8개의 코어 스레드까지 사용하고 더 이상 늘리지 않는다. (yaml 파일이나 Configuration 클래스에서 변경 가능)

 

ThreadPoolTaskExecutor는 Spring Boot의 @EnableAutoConfiguration을 통해 해당 Bean이 자동으로 생성된다.

만약 가상 스레드를 사용하는 경우 SimpleAsyncTaskExecutor 를 기본 설정으로 한다.

( Java 21이상, spring.threads.virtual.enabled 설정이 true 인 경우 )

 

 

-> 비동기로 구현하면 Thread를 다 사용하는 경우 어떻게 할건지에 대해 잘모르겠어서 


https://frog-in-well.tistory.com/98

 

 

@Async와 스레드 풀 - ThreadPoolTaskExecutor가 기본 설정이다!

회사에서 프로젝트를 진행하며 @Async를 사용할 일이 있었다. 기존 프로젝트의 설정이 완료된 상태였기 때문에 비동기로 동작해야 하는 메소드 위에 @Async만 붙이기만 하면 간단하게 지나갈 수 있

frog-in-well.tistory.com

 

https://colabear754.tistory.com/86