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); //첫번째 작업에 대해서만 초기 지연을 설정
'java > spring' 카테고리의 다른 글
[security] 스프링 시큐리티 기능 정리 (0) | 2022.04.14 |
---|---|
spring4shell 취약점 내용 정리 (0) | 2022.04.01 |