배치 어플리케이션의 경우 Spring에서 지원하는 배치 프레임 워크이다. 또한 배치 어플리케이션의 경우 스케줄링 프레임 워크가 아니다. 스케줄러의 경우 좋은 엔터 프라이즈가 있따. 배치 어플리케이션의 경우 스캐줄러를 대체하는 것이 아닌 함께 사용하기 위함이다.
다음과 같은 경우 배치 어플리케이션의 동작 시나리오 입니다.
사용자의 상호작용 없이 사용을 하고 오프라인 환경에서 유사한 트랜잭션 세트로 처리를 하는 기능을 제공을 한다.
배치의 경우 계층화된아키텍처
를 구성을 한다. 크게 3가지 요소로 나뉜다. 어플리케이션, 코어 그리고 인프라이다.
JobLancer
와 Job
그리고 Step
에 대한 구현이 Batch Core 에 포함되어 있습니다. ItemReader
와 ItemWriter
그리고 Retry
가 모두 사용하는 RetryTemplate
에 포함된다.일반 배치 원칙
의 경우 다음과 같은 사항을 고려 해야된다.
결함을 찾는 경우
프로젝트 스팩의 경우 다음과 같다
처음 프로젝트가 시작되면 일단 h2를 세팅을 시켜준다.
h2 데이터 베이스의 경우 로컬로만 사용을 하기위해 적용을 하려고 한다. 로컬 환경에서 사용을 안할경우 다른 RDBMS 를 사용을 하면된다.
h2의 경우 메모리/파일 모드
와TCP모드
모드가 있다. 일반적으로 default로 설정을 할경우 파일로 되어있기 때문에 이번 프로젝트의 경우 TCP 로 세팅을 해주려고한다.
kotlin에서의 설정 파일이다. 일단 당연하게도 빈을 설정을 해주기 위해서 configuration 어노테이션을 사용을 해준다. 빈으로 등록을 해주어야 하기 때문에 빈 어노테이션을 사용을 한다. 위의 코드의 경우 port 지정을 9095로 지정을 하였다.
다음으로 yml 파일 즉 설정파일을 작성을 해준다.
위와 같이 yml 파일을 설정을 해주면 h2의 기본 설정이 끝이 난다.
기존에 우리가 mvc 에서 사용을 했을때의 세팅과 같은데 Batch 어플리케이션을 만들기 위해서는 @EnableBatchProcessing
을 설정해줘야 된다.
@Import(BatchConfigurationSelector.class)
@Import 를 타고 들어가면 BatchConfigurationSelector
클래스가 나오는데
@EnableBatchProcessing
에서 modular 속성을 true 라면 ModularBatchConfiguration
를 아니라면 SimpleBatchConfiguration
빈을 등록 되는지 정할 수 있다.
@EnableBatchProcessing 을 선언을 해주면 ModularBatchConfiguration/SimpleBatchConfiguration 을 빈으로 등록을 해준다.
ModularBatchConfiguration/SimpleBatchConfiguration
은 설정 파일이기 때문에 추후에 자세하게 다루려고 한다.
스택오버풀을 참고를 하자면 이러한 질문이 있었다.
@EnableBatchProcessing
것이 어디 위치에 있어야 하는가?이다. 아무래도 배치 파일에 대한 설정 빈이 들어가기 떄문에 최상단에 있는게 맞다라고 생각이든다.
정리를 하자면