본문 바로가기

java/spring

Spring Scheduler

Spring task Scheduling

ThreadPoolTaskScheduler

  • ScheduledExecutorService에 작업을 위임하고 TaskExecutor 인터페이스를 구현한다
  • 내부 스레드 관리에 적합하다
  • 단일 인스턴스가 @Scheduled 비동기 스케쥴링을 처리할 수 있다
  • Thread 명에 ThreadPoolTaskScheduler 접두어가 붙는다
public class ThreadPoolTaskSchedulerConfig {

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
        ThreadPoolTaskScheduler threadPoolTaskScheduler
          = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(5); //async
        threadPoolTaskScheduler.setThreadNamePrefix(
          "ThreadPoolTaskScheduler");
        return threadPoolTaskScheduler;
    }
}

1. 고정 지연으로 실행가능한 스케쥴링

  1) 마지막 실행 후 지연 스케쥴링

  • task 종료 후 지연 (종료 후 1초 지연)
taskScheduler.scheduleWithFixedDelay(
  new RunnableTask("Fixed 1 second Delay"), 1000);

 

  2) 특정 날짜의 고정 지연 후 스케쥴링

  •  특정 날짜에 실행 + task 종료 후 지연 (5초 뒤 시작, 종료 후 1초 지연)
taskScheduler.scheduleWithFixedDelay(
 new RunnableTask("Current Date Fixed 1 second Delay"),
 java.sql.Timestamp.valueOf(LocalDateTime.now().plusSeconds(5)),
 1000
);

 

2. 고정 요율 스케쥴링

  1) 고정된 비율로 스케쥴링

  • 고정된 주기마다 실행(이전 task 종료와 무관하다)
  taskScheduler.scheduleAtFixedRate(
    new RunnableTask("Fixed Rate of 2 seconds") , 2000);

 

  2) 특정 날짜의 고정된 비율로 스케쥴링

  • 특정 날짜에 실행 + 고정된 주기마다 실행 (5초 뒤 실행, 3초마다 반복)
  taskScheduler.scheduleAtFixedRate(
          new RunnableTask(
                  "Fixed Rate of 2 seconds"),
          java.sql.Timestamp.valueOf(LocalDateTime.now().plusSeconds(5)),
          3000
  );

 

3. Cron Trigger 스케쥴링

  • Cron Expressionorg.springframework.scheduling.support.CronTrigger
 CronTrigger cronTrigger
        = new CronTrigger("*/5 * * * * ?");

taskScheduler.schedule(new RunnableTask("Cron Trigger"), cronTrigger);

4. PeriodicTrigger 스케쥴링

  • 고정지연 예약 스케쥴링 (2초 지연)
PeriodicTrigger periodicTrigger 
  = new PeriodicTrigger(2000, TimeUnit.MICROSECONDS);
  • 초기 지연 지원
  periodicTrigger.setFixedRate(true); // 고정 속도로 작업 
  periodicTrigger.setInitialDelay(1000); //첫번째 작업에 대해서만 초기 지연을 설정

 

 

출처 : 
- https://www.baeldung.com/spring-task-scheduler

- https://github.com/haedoang/java/tree/master/scheduler

'java > spring' 카테고리의 다른 글

[security] 스프링 시큐리티 기능 정리  (0) 2022.04.14
spring4shell 취약점 내용 정리  (0) 2022.04.01