@Scheduled

Promh90·2021년 11월 26일
0

spring boot

목록 보기
2/4

REF: https://www.baeldung.com/spring-scheduled-tasks

  1. @Scheduled annotation 사용 규칙
    • Method의 return type은 void여야함
    • Method는 parameter들을 받지 않는다
  1. Usage
    • Scheduling 활성화
@Configuration
@EnableScheduling
public class SpringConfig {
    ...
}
  • Fixed Delay
@Scheduled(fixedDelay = 1000)
public void scheduleFixedDelayTask() {
    System.out.println(
      "Fixed delay task - " + System.currentTimeMillis() / 1000);
}
  • Fixed Rate
@Scheduled(fixedRate = 1000)
public void scheduleFixedRateTask() {
    System.out.println(
      "Fixed rate task - " + System.currentTimeMillis() / 1000);
}

Fixed rate는 각 작업이 독립적인 경우 사용

기본적으로 작업이 끝나지 않으면 다음작업이 실행되지 않음. 병렬 실행 X

  • 병렬로 수행해야 하는 Job의 경우 @Async 어노테이션을 추가
@EnableAsync
public class ScheduledFixedRateExample {
    @Async
    @Scheduled(fixedRate = 1000)
    public void scheduleFixedRateTaskAsync() throws InterruptedException {
        System.out.println(
          "Fixed rate task async - " + System.currentTimeMillis() / 1000);
        Thread.sleep(2000);
    }
 
}
  • Fixed Rate vs Fixed Delay

    Fixed Delay는 Task 실행 완료 시간과 다음 Task 실행 시작 시간 사이의 n 밀리초의 조건 검사

    • 이 옵션은 항상 하나의 인스턴스 Job만 실행해야할때 유용하며 종속적인 Job에 유용

    Fixed Rate는 매 n 밀리 초마다 예약된 작업 실행

    • Job 마다 모든 실행이 독립적인 경우

    • 메모리와 스레드 풀의 크기를 초과하지 않을 것으로 예상되는 경우

      작업이 계속 쌓이다보면 Out of Memory exception 발생 가능성이 있음

  • Initial Delay

초기 initialDelay 이후 작업 수행되며 그 후 fixeddelay로 작업이 실행됨, initilizing 시간이 필요한 경우 유용

@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void scheduleFixedRateWithInitialDelayTask() {
  
    long now = System.currentTimeMillis() / 1000;
    System.out.println(
      "Fixed rate task with one second initial delay - " + now);
}
  • Cron Expressions
@Scheduled(cron = "0 15 10 15 * ?")
public void scheduleTaskUsingCronExpression() {
  
    long now = System.currentTimeMillis() / 1000;
    System.out.println(
      "schedule tasks using cron jobs - " + now);
}
  • Parameterizing the Schedule

    외부 Spring expressions를 사용한 설정파일로 파라미터 주입가능

    • A fixedDelay task: @Scheduled(fixedDelayString = "${fixedDelay.in.milliseconds}")

    • A fixedRate task: @Scheduled(fixedRateString = "${fixedRate.in.milliseconds}")

    • A cron expression based task: @Scheduled(cron = "${cron.expression}")

  • XML을 이용한 설정

<!-- Configure the scheduler -->
<task:scheduler id="myScheduler" pool-size="10" />
 
<!-- Configure parameters -->
<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="beanA" method="methodA"
      fixed-delay="5000" initial-delay="1000" />
    <task:scheduled ref="beanB" method="methodB"
      fixed-rate="5000" />
    <task:scheduled ref="beanC" method="methodC"
      cron="*/5 * * * * MON-FRI" />
</task:scheduled-tasks>
profile
재밌고 편하게~ 나의 개발 기록 Velog

0개의 댓글