1. 개요
시리즈 의 첫 번째 기사에서는 Spring Cloud Data Flow 의 아키텍처 구성 요소와 이를 사용하여 스트리밍 데이터 파이프라인을 만드는 방법을 소개했습니다.
무한한 양의 데이터가 처리되는 스트림 파이프라인과 달리 배치 프로세스를 사용하면 요청 시 작업이 실행되는 단기 서비스를 쉽게 만들 수 있습니다 .
2. 로컬 데이터 흐름 서버 및 셸
로컬 데이터 흐름 서버 는 응용 프로그램 배포를 담당하는 구성 요소이며 데이터 흐름 셸 을 사용 하면 서버와 상호 작용하는 데 필요한 DSL 명령을 수행할 수 있습니다.
이전 기사에서는 Spring Initilizr 를 사용 하여 둘 다 Spring Boot 애플리케이션으로 설정했습니다.
서버의 기본 클래스에 @EnableDataFlowServer 어노테이션 을 추가하고 셸의 기본 클래스에 @EnableDataFlowShell 어노테이션을 각각 추가한 후 다음 을 수행하여 시작할 준비가 되었습니다.
mvn spring-boot:run
서버는 포트 9393에서 부팅되고 쉘은 프롬프트에서 서버와 상호 작용할 준비가 됩니다.
로컬 데이터 흐름 서버 및 해당 셸 클라이언트 를 얻고 사용하는 방법에 대한 자세한 내용은 이전 문서를 참조할 수 있습니다 .
3. 배치 애플리케이션
서버 및 셸과 마찬가지로 Spring Initilizr 를 사용하여 루트 Spring Boot 배치 애플리케이션 을 설정할 수 있습니다.
웹 사이트에 접속한 후 그룹 , 아티팩트 이름을 선택 하고 의존성 검색 상자에서 Cloud Task 를 선택하기만 하면 됩니다.
이 작업이 완료되면 프로젝트 생성 버튼을 클릭하여 Maven 아티팩트 다운로드를 시작합니다.
아티팩트는 미리 구성된 기본 코드와 함께 제공됩니다. 배치 애플리케이션을 빌드하기 위해 편집하는 방법을 살펴보겠습니다.
3.1. 메이븐 의존성
먼저 몇 가지 Maven 의존성을 추가해 보겠습니다. 배치 애플리케이션이므로 Spring 배치 프로젝트 에서 라이브러리를 가져와야 합니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
또한 Spring Cloud Task는 관계형 데이터베이스를 사용하여 실행된 작업의 결과를 저장하므로 RDBMS 드라이버에 의존성을 추가해야 합니다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
Spring에서 제공하는 H2 인메모리 데이터베이스를 사용하기로 했습니다. 이것은 우리에게 부트스트래핑 개발의 간단한 방법을 제공합니다. 그러나 프로덕션 환경에서는 고유한 DataSource 를 구성해야 합니다 .
아티팩트의 버전은 Spring Boot의 상위 pom.xml 파일 에서 상속된다는 점에 유의 하십시오.
3.2. 메인 클래스
원하는 기능을 활성화하는 핵심 포인트는 @EnableTask 및 @EnableBatchProcessing 어노테이션을 Spring Boot의 기본 클래스에 추가하는 것입니다. 이 클래스 수준 어노테이션은 Spring Cloud Task에 모든 것을 부트스트랩하도록 지시합니다.
@EnableTask
@EnableBatchProcessing
@SpringBootApplication
public class BatchJobApplication {
public static void main(String[] args) {
SpringApplication.run(BatchJobApplication.class, args);
}
}
3.3. 작업 구성
마지막으로 작업을 구성해 보겠습니다. 이 경우 로그 파일 에 문자열 을 간단하게 인쇄합니다.
@Configuration
public class JobConfiguration {
private static Log logger
= LogFactory.getLog(JobConfiguration.class);
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Bean
public Job job() {
return jobBuilderFactory.get("job")
.start(stepBuilderFactory.get("jobStep1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
logger.info("Job was run");
return RepeatStatus.FINISHED;
}
}).build()).build();
}
}
작업 을 구성하고 정의하는 방법에 대한 자세한 내용은 이 문서의 범위를 벗어납니다 . 자세한 내용은 Spring Batch 소개 문서를 참조하세요.
마지막으로 애플리케이션이 준비되었습니다. 로컬 Maven 리포지토리에 설치해 보겠습니다. 이 작업을 수행하려면 프로젝트의 루트 디렉토리 로 이동하고 다음 명령을 실행하십시오.
mvn clean install
이제 애플리케이션을 Data Flow Server에 배치할 차례입니다.
4. 애플리케이션 등록
App Registry에 애플리케이션을 등록하려면 고유한 이름, 애플리케이션 유형 및 앱 아티팩트로 확인할 수 있는 URI를 제공해야 합니다.
Spring Cloud Data Flow Shell 로 이동 하고 프롬프트에서 명령을 실행합니다.
app register --name batch-job --type task
--uri maven://com.baeldung.spring.cloud:batch-job:jar:0.0.1-SNAPSHOT
5. 작업 만들기
작업 정의는 다음 명령을 사용하여 생성할 수 있습니다.
task create myjob --definition batch-job
이렇게 하면 이전에 등록된 배치 작업 애플리케이션을 가리키는 myjob 이라는 이름으로 새 작업이 생성 됩니다.
현재 작업 정의 List은 다음 명령을 사용하여 얻을 수 있습니다.
task list
6. 작업 실행
작업을 시작하려면 다음 명령을 사용할 수 있습니다.
task launch myjob
작업이 시작되면 작업 상태가 관계형 DB에 저장됩니다. 다음 명령을 사용하여 작업 실행 상태를 확인할 수 있습니다.
task execution list
7. 결과 검토
이 예에서 작업은 단순히 로그 파일에 문자열을 인쇄합니다. 로그 파일은 Data Flow Server 의 로그 출력 에 표시된 디렉토리 내에 있습니다 .
결과를 보기 위해 로그를 추적할 수 있습니다.
tail -f PATH_TO_LOG\spring-cloud-dataflow-2385233467298102321\myjob-1472827120414\myjob
[...] --- [main] o.s.batch.core.job.SimpleStepHandler: Executing step: [jobStep1]
[...] --- [main] o.b.spring.cloud.JobConfiguration: Job was run
[...] --- [main] o.s.b.c.l.support.SimpleJobLauncher:
Job: [SimpleJob: [name=job]] completed with the following parameters:
[{}] and the following status: [COMPLETED]
8. 결론
이 기사에서는 Spring Cloud Data Flow 를 사용하여 일괄 처리를 처리하는 방법을 보여주었습니다 .
예제 코드는 GitHub 프로젝트 에서 찾을 수 있습니다 .