Web Dev/Java Spring

Java Spring 프레임워크 Controller에서 함수에 스케줄링 작업 하는 벙법 (10분에 한번씩 작동)

이준호 2023. 10. 31. 17:01
반응형

자바 컨트롤러에서 

사용하는 함수를 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 애노테이션을 추가하고 실행 주기를 설정하여 스케줄링할 수 있습니다.

반응형