Spring Cloud Task는 일괄 데이터 처리 작업(batch data processing)과 같은 단기 Spring Boot 마이크로서비스를 구축하기 위한 프레임워크입니다. 프로젝트 사이트, 문서 및 샘플에서 프레임워크에 대해 자세히 알아볼 수 있습니다.
이 가이드에서는 Spring Cloud Task를 사용하는 Spring Boot 애플리케이션을 개발하고 이를 로컬 머신에 배포합니다. 처음에는 Spring Cloud Task 기능을 시연하기 위해 H2 데이터베이스를 사용하지만 Spring Cloud Task의 가치는 실행된 작업의 결과를 영구 데이터 저장소(persistent data store)에 저장하는 기능에 있습니다. 이 예에서는 MariaDB를 영구 데이터 저장소로 사용하여 진행합니다.
첫 번째 단계에서는 H2 데이터 저장소가 내장된 Spring Cloud Task를 사용합니다. 프로젝트 초기화 시 spring.datasource
속성이 감지되지 않으면 Spring Cloud Task는 새 H2 인스턴스를 가동하여 실행된 작업 결과를 저장합니다. 이는 추가 구성(configuration) 없이 발생합니다. 이렇게 하면 빠르게 시작하고 실행할 수 있지만 애플리케이션이 완료되고 H2 데이터베이스가 종료되면 실행된 작업의 결과가 손실됩니다. 가이드의 이 단계에서는 application.properites
의 spring.datasource
속성이 주석(comment) 처리되어 있는지 확인하세요.
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.task.configuration.EnableTask;
import org.springframework.cloud.task.listener.annotation.AfterTask;
import org.springframework.cloud.task.listener.annotation.BeforeTask;
import org.springframework.cloud.task.repository.TaskExecution;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableTask
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner() {
return new HelloWorldCommandLineRunner();
}
@BeforeTask
public void beforeMethod(TaskExecution taskExecution) {
System.out.println("Before task");
}
@AfterTask
public void afterMethod(TaskExecution taskExecution) {
System.out.println("After task");
}
public static class HelloWorldCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("Hello Spring Cloud Task!");
}
}
}
단기 작업보다 오래 지속되는 데이터를 유지하려면 외부에서 사용 가능한 데이터 저장소가 필요합니다. 이 가이드에서는 Docker 컨테이너에서 실행되는 MariaDB 인스턴스를 사용합니다.
메모
이 가이드를 따르려면 Docker를 로컬에서 실행해야 합니다.
MariaDB를 로컬로 실행하려면 다음 명령을 실행하십시오.
docker run -p 3306:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=task -d mariadb:latest
MariaDB 인스턴스가 실행 중이면 application.properties
를 통해 애플리케이션에 구성을 제공합니다.
spring.datasource.url=jdbc:mariadb://localhost:3306/task
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
이제 애플리케이션을 다시 실행하면 MariaDB 인스턴스 내부에 작업 실행 결과가 저장됩니다. Docker 컨테이너에 셸을 가져와 이를 확인할 수 있습니다.
docker exec -it mariadb mariadb --user root -ppassword
그런 다음 명령을 실행하십시오.
use task;
show tables; --show all tables that Spring Cloud Task created
select * from task_execution;
MariaDB 인스턴스가 실행되는 동안 실행한 모든 프로그램 실행을 볼 수 있어야 합니다.
도커로 마리아 디비를 열어놓은 상태로 다시 애플리케이션을 실행하면 이미 테이블이 존재한다며 에러메시지가 나온다.
도커에서 마리아디비를 확인하면 방금 실행한 내용이 반영되어 있음을 알 수 있다.
요약
축하해요! Spring Cloud Task의 상위 수준 개요를 완료했으며 Spring Cloud Task 애플리케이션을 빌드, 테스트 및 시작할 수 있었습니다.