[Spring] @Scheduled 이란?
@Scheduled 애노테이션?
Spring Scheduler는 @Scheduled 애노테이션을 명시해 사용할 수 있습니다.
보통 실행하고자 하는 메소드명 위에 명시해놓고 사용
@ 풀 크기 늘리기
# springBoot
application.properties
기본 풀 크기는 1이며 과학 springboot2.1.0에서 값을 변경하여 풀 크기를 설정할 수 있다
spring.task.scheduling.pool.size.
spring.task.scheduling.pool.size=20
# springFramework
servlet-context.xml
<task:scheduler id="jobScheduler" pool-size="10" />
<task:annotation-driven scheduler="jobScheduler" />
<context:component-scan base-package="com.example.demo" />
Tasks.class를 인식하기 위한 component-scan 코드 추가
----------------------------------------------------------------------------------------------------------------------------------------------------------------
# 쓰고하자는 class에 추가
@EnableScheduling
@Component
----------------------------------------------------------------------------------------------------------------------------------------------------------------
# 사용법
# fixedRate
fixedRate 는 작업의 시작부터 시간을 카운트합니다.
코드
@Scheduled(fixedRate=1000) // 단위: ms
public void fixedRateScheduler() {
System.out.println("나는 작업이 끝날때 까지 기다리지 않고 1000ms 마다 실핼될거야");
}
# fixedDelay
- 해당 메서드가 끝나는 시간 기준, milliseconds 간격으로 실행
- 하나의 인스턴스만 항상 실행되도록 해야 할 상황에서 유용
@Scheduled(fixedDelay = 1000)
// @Scheduled(fixedDelayString = "${fixedDelay.in.milliseconds}") // 문자열 milliseconds 사용 시
public void scheduleFixedDelayTask() throws InterruptedException {
log.info("Fixed delay task - {}", System.currentTimeMillis() / 1000);
Thread.sleep(5000);
}
# fixedDelay + fixedRate
- initialDelay 값 이후 처음 실행 되고, fixedDelay 값에 따라 계속 실행
@Scheduled(fixedDelay = 1000, initialDelay = 5000)
public void scheduleFixedRateWithInitialDelayTask() {
long now = System.currentTimeMillis() / 1000;
log.info("Fixed rate task with one second initial delay - {}", now);
}
# cron
cron 은 개발자가 초, 분, 시, 일, 월, 주, (년) 을 지정해 스케줄러를 동작 시킵니다.
이 때, (년) 은 생략 가능합니다.
저는 cron 이 정확히 지정한 시간에서만 실행됨을 보장하기 때문에 예약 발송 스케줄러에 더 적합한 방식이라고 생각해서 cron 을 채택했습니다. (👍)
코드
@Scheduled(cron="0/60 * * * * ?")
public void cronScheduler() {
System.out.println("나는 시스템 시간을 기준으로 1분 마다 주기적으로 실행될거야");
}
크론 자동 생성 사이트
CronMaker
www.cronmaker.com
----------------------------------------------------------------------------------------------------------------------------------------------------------------
https://data-make.tistory.com/699
[Spring Boot] Scheduler 사용해보기(일정 주기로 실행하는 스프링 스케쥴러)
The Scheduled Annotation in Spring @Scheduler를 사용해서 일정한 시간 간격으로, 혹은 특정 일정에 코드가 실행되도록 해보자. Spring Scheduler Dependency Spring Boot starter 에 기본적으로 의존 org.springframework.schedul
data-make.tistory.com