티스토리 뷰
정해진 시간 또는 일정에 특정 함수가 실행되는 기능을 구현하여, Batch 처리 작업 또는 주기적인 데이터 수집, 송신 기능을 구현할 수 있습니다. SpringBoot에서 제공하는 @Scheduled, @EnableScheduling 어노테이션을 활용하면, 스케줄링 기능을 사용하실 수 있습니다. 이번 포스팅에서는 SpringBoot에서 스케줄링 기능을 사용하는 방법에 대해 알아보겠습니다.
Springboot 스케줄링 프로젝트 다운로드
https://start.spring.io/ 에서 Dependencies에 별다른 항목을 선택하지 않고, 기본 설정만 선택하고 프로젝트를 다운로드합니다.
스케줄링 테스트용 클래스 작성 및 실행하기
IntelliJ로 다운로드한 프로젝트를 열기를 합니다. 여기서 스케줄링을 실행할 클래스를 아래와 같이 작성해줍니다.
package com.example.demo;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
}
@Component 어노테이션을 추가하여, Springboot에게 Bean 클래스라는 것을 알려주고, 해당 클래스의 Bean이 생성되도록 설정해줍니다. @Scheduled 어노테이션가 지정된 메서드는 옵션에 따라서 주기적으로 실행됩니다. 여기서는 FixedRate 옵션을 사용하였는데, 이는 5초 간격으로 메서드가 주기적으로 실행해라는 의미입니다. FixedRate 이외에도, 여러 가지 옵션이 있습니다. Unix / Linux OS에서 많이 사용하는 스케줄러 기능인 Cron 기능도 제공합니다. https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#scheduling URL에 접속하면, Springboot에서 제공하는 다양한 스케줄링 옵션을 확인 가능하고, 이를 사용할 수 있습니다.
@Scheduled(fixedRate = 50000)는 5초 간격으로 reportCurrentTime() 메서드를 실행하라는 옵션으로 해석할 수 있습니다. 스케줄링을 설정한 클래스가 실제로 SpringBoot 애플리케이션에서 동작하는지 확인해보겠습니다.
SpringBoot를 실행하는 Main클래스에 @EnableScheduling 어노테이션을 추가해주면, 백그라운드에서 동작하는 지정된 스케줄을 실행하는 executor가 생성되어, 스케줄링이 올바르게 동작됩니다. 만약, @EnableScheduling 어노테이션을 지정해주지 않는다면, 메서드에 @Scheduled를 지정하였더라도 스케줄링 기능을 동작하지 않습니다.
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
main함수를 실행해보면, 로그가 5초 단위로 기록된 것을 확인할 수 있습니다.
The time is now 10:36:09
The time is now 10:36:14
The time is now 10:36:19
지금까지 SpringBoot에서 Schedule을 지정하고 이를 실행하는 방법을 알아보았습니다.
'IT 기술' 카테고리의 다른 글
윈도우에서 도커(Docker) 설치하는 방법 (0) | 2022.08.04 |
---|---|
Springboot 파일 업로드 기능 구현하기 (Multi-Part 전송) (0) | 2022.08.03 |
Springboot Batch Job 처리 서비스 만들기 (0) | 2022.08.01 |
SPA와 MPA 차이, 장단점 비교 (웹사이트 검색 노출 원리) (1) | 2022.07.31 |
SpringBoot JPA 사용법 (0) | 2022.07.31 |
- Total
- Today
- Yesterday
- 클린코드작성원칙
- python
- notion 업무일정관리
- iframe 태그 찾기
- springboot build
- SPA
- 코드스멜 유형
- token
- 테스팅 자동화
- codesmell 유형
- API Gateway 캐싱
- 멀티코어 멀티프로세서
- C++
- notion
- selenium
- OSI 7계층
- springboot restapi
- oracle 메모리
- springboot 실행
- springboot rest api 서버
- 디자인패턴 구조패턴
- 디자인패턴
- 클린코드작성법
- 스프링부트빌드
- AWS
- 스프링부트 restapi
- TCP/UDP
- MPA
- oracle pga sga
- 스프링부트실행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |