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 프로젝트 에서 찾을 수 있습니다 .

Cloud footer banner