Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Arrays
- 프로젝트 구조
- 스프링 부트
- GOF
- 스프링
- 스프링 스케줄러
- Spring Mail
- java
- codility
- 의존성관리
- pair
- pom.xml
- maven
- list
- 스프링부트
- thymeleaf
- Spring
- Dependency
- Spring Boot
- mybatis
- spring scheduler
- Collections
- vuejs #vue #js #프론트엔드 #nodejs #클라이언트사이드 #템플릿엔진
- 스프링 메일
- HashMap
- springboot
- C++
- 프로그래머스
- 코딩테스트
- @Scheduled
Archives
- Today
- Total
Rooted In Develop
스프링 부트 스케줄러 @Scheduled 어노테이션 사용법(@Scheduled Annotation) 본문
Back End/Spring Boot
스프링 부트 스케줄러 @Scheduled 어노테이션 사용법(@Scheduled Annotation)
RootedIn 2020. 4. 22. 22:15@Scheduled 사용법에 대해 소스 예제를 들어 설명하겠습니다.
1. @EnableScheduling 추가
1) @SpringBootApplication에 선언
package me.rooted.schedule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@SpringBootApplication
public class SpringSchedulerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringSchedulerApplication.class, args);
}
}
2) @Component(@Service 등)에 선언
package me.rooted.schedule;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@EnableScheduling
@Component
public class ScheduledExample {
}
@EnableScheduling은 꼭! SpringBootApplication이 선언된 패키지나, 그 하위 패키지에 선언하여야합니다.
또한 @Scheduled는 @EnableScheduling이 선언된 패키지나, 그 하위 패키지에 선언되어야 정상 동작합니다.
2. @Scheduled 사용법
1) cron
@Scheduled(cron = "0/5 * * * * ?")
public void scheduledCron() {
log.info("scheduledCron");
}
cron 표현식을 사용합니다.
cron = "초 분 시 일 월 요일" 로 이루어져 있습니다.
위의 cron 표현식은 5초마다 실행하는 스케줄러가 되겠습니다.
2) fixedDelay
@Scheduled(fixedDelay = 1000)
public void scheduledFixedDelay() throws InterruptedException {
log.info("scheduledFixedDelay");
Thread.sleep(200L);
}
해당 메소드가 종료된 이후부터 그 다음 메소드 실행시간까지의 주기이며, 단위는 ms입니다.
- 실행결과 : 200ms만큼 sleep하여서, 1.2초마다 메소드가 실행됩니다.
2020-04-22 22:09:25.063 INFO 68 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedDelay
2020-04-22 22:09:26.265 INFO 68 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedDelay
2020-04-22 22:09:27.467 INFO 68 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedDelay
2020-04-22 22:09:28.669 INFO 68 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedDelay
2020-04-22 22:09:29.871 INFO 68 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedDelay
3) fixedRate
@Scheduled(fixedRate = 1000)
public void scheduledFixedRate() throws InterruptedException {
log.info("scheduledFixedRate");
Thread.sleep(200L);
}
해당 메소드가 실행된 직후부터의 주기이며, 단위는 ms입니다.
- 실행결과 : 200ms만큼 sleep하여도, 1초마다 메소드가 실행됩니다.
2020-04-22 22:06:40.390 INFO 7932 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedRate
2020-04-22 22:06:41.390 INFO 7932 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedRate
2020-04-22 22:06:42.390 INFO 7932 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedRate
2020-04-22 22:06:43.390 INFO 7932 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedRate
2020-04-22 22:06:44.390 INFO 7932 --- [ scheduling-1] me.rooted.schedule.ScheduledExample : scheduledFixedRate
4) fixedDelayString
@Scheduled(fixedDelayString = "${fixed.delay.string}")
public void scheduledFixedDelayStringProperty() {
log.info("scheduledFixedDelayStringProperty");
}
- src/main/resources/application.properties
fixed.delay.string=2000
properties에서 스케줄링 주기를 받아올 수 있습니다.
5) fixedRateString
@Scheduled(fixedRateString = "${fixed.rate.string}")
public void scheduledFixedRateStringProperty() {
log.info("scheduledFixedRateStringProperty");
}
- src/main/resources/application.properties
fixed.rate.string=2000
properties에서 스케줄링 주기를 받아올 수 있다.
6) initialDelay
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void scheduledFixedDelay() {
log.info("scheduledFixedDelay");
}
7) initialDelayString
@Scheduled(fixedDelay = 1000, initialDelayString = "${initial.delay.string}")
public void scheduledFixedDelay() {
log.info("scheduledFixedDelay");
}
- src/main/resources/application.properties
initial.delay.string=2000
properties에서 스케줄링 주기를 받아올 수 있다.
도움이 되셨다면, 공감 클릭과 댓글 부탁드립니다.
'Back End > Spring Boot' 카테고리의 다른 글
Spring Boot 프로젝트 구조 (0) | 2019.12.27 |
---|---|
Spring Boot 원리 : 자동 설정(Auto Configuration) (1) | 2019.09.02 |
Spring Boot 원리 : 의존성(Dependency) 관리 (0) | 2019.09.02 |
간단한 스프링 스케줄러(Spring Scheduler) 사용하기 : @Scheduled Annotation (0) | 2019.08.19 |
Spring Boot 메일 전송 : Spring Boot 2, Mail, Thymeleaf (2) | 2019.08.19 |
Comments