Spring Batch는 엔터프라이즈 시스템의 일상적인 운영에 필수적인 강력한 배치 애플리케이션 개발을 지원하도록 설계된 가볍고 포괄적인 배치 프레임워크입니다. Spring Batch는 사람들이 Spring Framework에서 알게 된 생산성, POJO 기반 개발 접근 방식 및 일반적인 사용 편의성 기능을 기반으로 구축되는 동시에 개발자가 필요할 때 고급 엔터프라이즈 서비스에 쉽게 액세스하고 활용할 수 있도록 해줍니다.
Batch 애플리케이션을 위한 런타임 조정 도구를 찾고 있거나 현재 및 기록 실행을 보기 위해 관리 콘솔이 필요한 경우 Spring Cloud Data Flow를 살펴보세요. Spring Batch 애플리케이션을 포함한 데이터 통합 기반 마이크로서비스를 배포하고 실행하기 위한 오케스트레이션 도구입니다.
이 빠른 튜토리얼에서는 Spring Batch를 사용하여 간단한 배치 작업을 실행하기 위해 최소 프로젝트를 설정하는 방법을 보여줍니다.
선호하는 IDE에서 새로운 Maven 기반 Java 17+ 프로젝트를 생성하고 다음 종속성을 추가합니다.
< dependencies >
< dependency >
< groupId >org.springframework.batch</ groupId >
< artifactId >spring-batch-core</ artifactId >
< version >${LATEST_VERSION}</ version >
</ dependency >
< dependency >
< groupId >org.hsqldb</ groupId >
< artifactId >hsqldb</ artifactId >
< version >${LATEST_VERSION}</ version >
< scope >runtime</ scope >
</ dependency >
</ dependencies >
그런 다음 작업 저장소에서 사용할 데이터 소스 및 트랜잭션 관리자를 정의하는 구성 클래스를 만듭니다.
import javax . sql . DataSource ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
import org . springframework . jdbc . support . JdbcTransactionManager ;
import org . springframework . jdbc . datasource . embedded . EmbeddedDatabaseBuilder ;
@ Configuration
public class DataSourceConfiguration {
@ Bean
public DataSource dataSource () {
return new EmbeddedDatabaseBuilder ()
. addScript ( "/org/springframework/batch/core/schema-hsqldb.sql" )
. build ();
}
@ Bean
public JdbcTransactionManager transactionManager ( DataSource dataSource ) {
return new JdbcTransactionManager ( dataSource );
}
}
이 튜토리얼에서는 Spring Batch의 메타데이터 테이블을 사용하여 임베디드 HSQLDB 데이터베이스를 생성하고 초기화합니다.
마지막으로 일괄 작업을 정의하는 클래스를 만듭니다.
import org . springframework . batch . core . Job ;
import org . springframework . batch . core . JobParameters ;
import org . springframework . batch . core . Step ;
import org . springframework . batch . core . configuration . annotation . EnableBatchProcessing ;
import org . springframework . batch . core . job . builder . JobBuilder ;
import org . springframework . batch . core . launch . JobLauncher ;
import org . springframework . batch . core . repository . JobRepository ;
import org . springframework . batch . core . step . builder . StepBuilder ;
import org . springframework . batch . repeat . RepeatStatus ;
import org . springframework . context . ApplicationContext ;
import org . springframework . context . annotation . AnnotationConfigApplicationContext ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
import org . springframework . context . annotation . Import ;
import org . springframework . jdbc . support . JdbcTransactionManager ;
@ Configuration
@ EnableBatchProcessing
@ Import ( DataSourceConfiguration . class )
public class HelloWorldJobConfiguration {
@ Bean
public Step step ( JobRepository jobRepository , JdbcTransactionManager transactionManager ) {
return new StepBuilder ( "step" , jobRepository ). tasklet (( contribution , chunkContext ) -> {
System . out . println ( "Hello world!" );
return RepeatStatus . FINISHED ;
}, transactionManager ). build ();
}
@ Bean
public Job job ( JobRepository jobRepository , Step step ) {
return new JobBuilder ( "job" , jobRepository ). start ( step ). build ();
}
public static void main ( String [] args ) throws Exception {
ApplicationContext context = new AnnotationConfigApplicationContext ( HelloWorldJobConfiguration . class );
JobLauncher jobLauncher = context . getBean ( JobLauncher . class );
Job job = context . getBean ( Job . class );
jobLauncher . run ( job , new JobParameters ());
}
}
이 튜토리얼의 작업은 "Hello world!"를 인쇄하는 단일 단계로 구성됩니다. 표준 출력으로.
이제 HelloWorldJobConfiguration
클래스의 main
메서드를 실행하여 작업을 시작할 수 있습니다. 출력은 다음과 유사해야 합니다.
INFO: Finished Spring Batch infrastructure beans configuration in 8 ms.
INFO: Starting embedded database: url='jdbc:hsqldb:mem:testdb', username='sa'
INFO: No database type set, using meta data indicating: HSQL
INFO: No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
INFO: No TaskExecutor has been set, defaulting to synchronous executor.
INFO: Job: [SimpleJob: [name=job]] launched with the following parameters: [{}]
INFO: Executing step: [step]
Hello world!
INFO: Step: [step] executed in 10ms
INFO: Job: [SimpleJob: [name=job]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 25ms
이 가이드는 플랫 파일에서 데이터를 읽고, 변환하고, 관계형 데이터베이스에 쓰는 일반적인 ETL 배치 작업을 보여주는 보다 현실적인 튜토리얼입니다. Spring Boot를 기반으로 한 Spring Batch 프로젝트입니다. 시작 가이드는 배치 서비스 생성에서 찾을 수 있습니다.
여기에서 시험해 볼 수 있는 여러 샘플을 찾을 수 있습니다: Spring Batch 샘플.
질문이나 지원 요청이 있는 경우 GitHub 토론에서 새 토론을 열거나 StackOverflow에 질문을 하세요.
질문이나 지원 요청에 대해 이슈 트래커에 이슈를 생성하지 마십시오 . 우리는 버그 보고서 및 기능 요청을 위해서만 이슈 트래커를 유지하고 싶습니다.
Spring Batch는 GitHub 문제를 사용하여 버그 및 기능 요청을 기록합니다. 문제를 제기하려면 아래 권장 사항을 따르십시오.
사소하지 않은 버그의 경우 문제 보고 지침에 설명된 대로 문제를 복제하는 테스트 사례나 프로젝트를 만들어 문제에 첨부하세요.
당사의 보안 정책을 참조하십시오.
Github 홈 페이지의 URL을 사용하여 git 저장소를 복제합니다.
$ git clone [email protected]:spring-projects/spring-batch.git
$ cd spring-batch
Maven은 Spring Batch에 사용되는 빌드 도구입니다. 다음 명령을 사용하여 프로젝트를 빌드할 수 있습니다.
$ ./mvnw package
모든 통합 테스트를 통해 전체 빌드를 수행하려면 다음을 실행하세요.
$ ./mvnw verify
일부 통합 테스트는 Docker를 기반으로 하므로 전체 빌드를 실행하기 전에 Docker를 실행하고 있는지 확인하십시오.
참조 문서를 생성하려면 다음 명령을 실행하십시오.
$ cd spring-batch-docs
$ ../mvnw antora:antora
참조 문서는 spring-batch-docs/target/anotra/site
에서 찾을 수 있습니다.
Docker 컨테이너에서 프로젝트를 빌드하려면 다음과 같이 진행할 수 있습니다.
$> docker run -it --mount type=bind,source="$(pwd)",target=/spring-batch maven:3-openjdk-17 bash
#> cd spring-batch
#> ./mvnw package
그러면 이전에 복제한 소스 코드가 컨테이너 내부의 호스트에 마운트됩니다. 컨테이너 내부의 소스 코드 복사본 작업을 수행하려면(호스트에 부작용이 없음) 다음과 같이 진행할 수 있습니다.
$> docker run -it maven:3-openjdk-17 bash
#> git clone https://github.com/spring-projects/spring-batch.git
#> cd spring-batch
#> ./mvnw package
우리는 어떤 종류의 기여도 환영합니다! 프로젝트에 기여할 수 있는 몇 가지 방법은 다음과 같습니다.
풀 요청을 수락하기 전에 기여자의 계약서에 서명해야 합니다. 기여자의 동의서에 서명한다고 해서 어느 누구에게도 기본 저장소에 대한 커밋 권한이 부여되는 것은 아니지만, 이는 우리가 귀하의 기여를 수락할 수 있다는 것을 의미하며, 그렇게 하면 귀하는 작성자 크레딧을 받게 됩니다. 활동적인 기여자는 핵심 팀에 합류하라는 요청을 받고 풀 요청을 병합할 수 있는 능력을 부여받을 수 있습니다.
우리의 행동 강령을 참조하십시오.
Spring Batch는 Apache 2.0 라이센스에 따라 출시된 오픈 소스 소프트웨어입니다.