Spring boot Scheduler 구현하기

2022. 6. 7. 17:53·Java/Spring Boot

사내에서 자정에 캠페인의 state 값들을 변경하기 위한 스케줄링 시스템이 필요하여 구현해 보았다.

 

스케줄러 기능 활성화

Spring boot는 지원하는 스케줄러가 존재하기 때문에 간단하게 활용할 수 있다.

기본적으로 프로젝트 Application 안에 @EnableScheduling 어노테이션을 사용하면

기능 활성화를 할 수 있다.

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) throws ParseException, JsonProcessingException {
      SpringApplication.run(Application.class, args);
    }
}

 

스케줄러 구현하기

기본적으로 @Scheduled 어노테이션을 메소드에 선언하며 실행 주기를 설정한다.

실행 주기는 cron, fixedDelay, fixedRate 라는 3개의 속성을 지정할 수 있지만

나는 cron을 활용하기로 하였다. 우선 cron 주기 설정 방법이다.

*           *      *      *      *      *
초(0-59)   분(0-59)  시간(0-23)  일(1-31)  월(1-12)  요일(0-7) 
각 별 위치에 따라 주기를 다르게 설정 할 수 있다.
순서대로 초-분-시간-일-월-요일 순이다. 그리고 괄호 안의 숫자 범위 내로 별 대신 입력 할 수도 있다.
요일에서 0과 7은 일요일이며, 1부터 월요일이고 6이 토요일이다.

위와 같은 방법으로 주기를 지정해주는데 우리는 자정에 스케줄러를 작동할 것이기 때문에

@Scheduled(cron = "0 0 0 * * *") 이렇게 지정해 주었다.

위 내용은 365일 내내 0시 0분 0초에 스케줄러를 작동하라는 의미이다.

List<Campaign> campaignList = campaignRepository.findAll();
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE;

cronJobSch이라는 메소드의 첫 부분을 가져왔다.

List<Campaign> campaignList = campaignRepository.findAll();

우리는 캠페인의 state를 변경하기 위하여 캠페인 리스트를 전부 불러온다.

LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE;

이후 DB에 존재하는 시간 포맷과 비교할 시간의 포맷이 일치하지 않아 포맷팅을 해주었다.

if(campaign.getCampaignReview().getSelectedDt().format(formatter).equals(now.format(formatter)))

위 형식처럼 시간을 맞춘 뒤 비교하여 일치하는 내용으로 원하는 내용을 작성하면 된다.

저작자표시 비영리 (새창열림)

'Java > Spring Boot' 카테고리의 다른 글

Spring boot RestAPI 파일 다운로드  (0) 2023.02.10
Spring boot Controller Zip 압축 해제  (0) 2023.01.25
Spring boot H2 DB 설정  (0) 2022.11.10
[Spring boot + React] Rest Api 연동하기  (0) 2022.08.16
Spring boot 패키지 구조 및 내용  (0) 2022.02.22
'Java/Spring Boot' 카테고리의 다른 글
  • Spring boot Controller Zip 압축 해제
  • Spring boot H2 DB 설정
  • [Spring boot + React] Rest Api 연동하기
  • Spring boot 패키지 구조 및 내용
요술공주밍키
요술공주밍키
조금씩이라도 꾸준히..
  • 요술공주밍키
    삽질의흔적
    요술공주밍키
  • 전체
    오늘
    어제
    • 분류 전체보기 (139)
      • Java (42)
        • Spring Boot (14)
        • Spring Boot 게시판 (14)
        • 공중화장실 찾기 (4)
        • 쇼핑몰 (8)
      • JavaScript (8)
        • NodeJS (2)
      • Python (5)
        • Django (4)
      • Server (10)
        • Docker (4)
        • K8S (0)
        • Jenkins (1)
      • 알고리즘 (24)
        • 프로그래머스 (19)
        • 백준 (5)
      • Etc (21)
        • 개발 팁 (1)
      • 일상 (27)
        • 독서 포스트 (25)
        • 회고록 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
요술공주밍키
Spring boot Scheduler 구현하기
상단으로

티스토리툴바