개발/Spring Framework

[Spring] @Scheduled 이란?

멋진놈 2022. 12. 6. 14:06
728x90

@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분 마다 주기적으로 실행될거야");
}

 

크론 자동 생성 사이트

http://www.cronmaker.com/?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