티스토리 뷰

728x90
반응형

정해진 시간 또는 일정에 특정 함수가 실행되는 기능을 구현하여, 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에서 제공하는 다양한 스케줄링 옵션을 확인 가능하고, 이를 사용할 수 있습니다.

 

Integration

As a lightweight container, Spring is often considered an EJB replacement. We do believe that for many, if not most, applications and use cases, Spring, as a container, combined with its rich supporting functionality in the area of transactions, ORM and JD

docs.spring.io

@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을 지정하고 이를 실행하는 방법을 알아보았습니다.

728x90
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함