자바 컨트롤러에서
사용하는 함수를 10분에 한번씩 서버가 작동하는 동안 자동으로 실행 되도록 하고 싶다면
Java Spring 프레임워크에서 스케줄링 작업을 처리하기 위해 스케줄러를 사용할 수 있습니다.
가장 일반적으로 사용되는 스케줄러는 Spring의 @Scheduled 어노테이션을 사용한 스케줄링입니다.
이것을 이용하면 주기적으로 메소드를 실행할 수 있습니다.
이때 @Scheduled 어노테이션을 사용하려면 다음의 단계를 따르면 됩니다.
프로젝트에 Spring 스케줄링을 위한 의존성을 추가해야 합니다. Spring Boot를 사용한다면 이미 내장된 스케줄러가 포함되어 있습니다.
스케줄링할 메소드를 작성하고 @Scheduled 어노테이션을 사용하여 주기를 설정합니다.
예를 들어, 10분마다 실행되어야 하는 메소드를 스케줄링하려면 다음과 같이 코드를 작성할 수 있습니다:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class YourService {
@Scheduled(fixedRate = 600000) // 600,000 밀리초 = 10분
public void yourScheduledMethod() {
// 이 메소드는 10분마다 실행됩니다.
// 여기에 10분마다 실행해야 하는 코드를 작성하세요.
}
}
위의 코드에서 @Scheduled 어노테이션의 fixedRate 속성을 사용하여 10분마다 실행되도록 설정했습니다.
fixedRate 값은 밀리초 단위로 지정하며, 위의 예제에서는 600,000 밀리초(10분)으로 설정되었습니다.
또한, 스케줄링을 사용하려면 스프링 설정 파일에서 스케줄링을 활성화하는 설정을 해야할 수 있습니다.
Spring Boot를 사용한다면 일반적으로 이러한 설정은 자동으로 활성화됩니다.
이렇게 설정한 메소드는 애플리케이션이 실행되면 스케줄러에 의해 주기적으로 실행됩니다.
전자정부프레임워크에서 스케줄링 작업을 설정하려면 Spring 스케줄링과 유사한 방법을 사용할 수 있습니다.
전자정부프레임워크는 Spring 기반으로 개발되었으므로,
@Scheduled 어노테이션과 유사한 스케줄링 설정을 할 수 있습니다.
다음은 전자정부프레임워크에서 스케줄링 작업을 설정하는 방법입니다:
스케줄링할 메소드를 작성합니다. 메소드는 주기적으로 실행하려는 작업을 포함해야 합니다.
스케줄링을 위해 XML 설정 파일에 <task:scheduled-tasks> 엘리먼트를 추가합니다. 여기에 스케줄링할 메소드와 주기를 설정할 수 있습니다.
예를 들어, 전자정부프레임워크에서 10분마다 실행되는 스케줄링 작업을 설정하려면 다음과 같이 XML 설정 파일을 수정할 수 있습니다:
<task:scheduler id="taskScheduler" pool-size="1" />
<task:scheduled-tasks scheduler="taskScheduler">
<task:scheduled ref="yourBeanName" method="yourScheduledMethod" fixed-rate="600000" />
</task:scheduled-tasks>
위의 XML 구성에서:
<task:scheduler> 엘리먼트는 스케줄러를 정의합니다.<task:scheduled> 엘리먼트는 실제로 스케줄링된 작업을 정의합니다.
ref 속성은 스케줄링할 빈(bean)의 이름을 지정합니다.
method 속성은 실행할 메소드의 이름을 지정합니다.
fixed-rate 속성은 작업을 실행하는 간격을 지정하며, 이 경우 600,000 밀리초(10분)로 설정했습니다.
저는 해당 xml 파일 설정 코드를 사용하였습니다.
<task:annotation-driven executor="taskExecutor" scheduler="taskScheduler" />
<task:executor id="taskExecutor" pool-size="10" />
<task:scheduler id="taskScheduler" />
<task:annotation-driven>을 사용하는 경우, 스케줄링 설정을 애노테이션과 Java 코드를 통해 할 수 있습니다.
tenMinEVChargerApiDataToDB 메소드를 스케줄링하려면 @Scheduled 애노테이션을 사용하여 메소드를 스케줄링합니다.
스케줄러 설정을 XML에서 정의하지 않아도 됩니다.
아래와 같이 메소드에 @Scheduled 애노테이션을 추가합니다:
import org.springframework.scheduling.annotation.Scheduled;
// ...
@Scheduled(fixedRate = 600000) // 10분(600,000밀리초)마다 실행
public void tenMinEVChargerApiDataToDB() {
// 메소드 내부 코드
}
이제 메소드는 10분 간격으로 실행됩니다. <task:annotation-driven> 설정과 같이 사용할 필요가 없습니다.
기존 XML 설정 파일에서 <task:annotation-driven>와 task:executor, task:scheduler 등의 설정을 사용하지 않고, 애노테이션을 통한 스케줄링으로 변경했으므로, 해당 XML 설정 부분은 필요 없어집니다.
애노테이션 기반 스케줄링을 사용할 때, 메소드에 @Scheduled 애노테이션을 추가하고 실행 주기를 설정하여 스케줄링할 수 있습니다.