Java Stack/Spring Batch
afterStep 에서 Exception을 던져도 다음 Step이 이어서 실행된다.
afterStep 에서 Exception을 던져도 다음 Step이 이어서 실행된다.
2023.09.19afterStep에서 검증 로직 돌린 후, 다음 Step 실행하지 않고 배치를 종료하고 싶은 경우가 있다. 배치 애플리케이션을 아예 종료해버리는 방법도 있지만, 보다 graceful 하게 처리하고 싶은 경우, 다음 Step이 실행되지 않도록 하려면? 종료 상태를 나타내는 Status는 BatchStatus와 ExitStatus 두개가 있다. https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html#batchStatusVsExitStatus ExitStatus represents the status of a Step after it finishes execution. on(ExitStatus...) 로 Step의 종료..
전문 해석기 배치 - File Line to Domain Model 변환
전문 해석기 배치 - File Line to Domain Model 변환
2023.07.29전문 해석 시 고려해야 하는 것들은, align, padding, trim, 날짜 포맷, 숫자 포맷 변환 등이다. 문자 타입은 끝문자 trim 정도만 처리하면 제대로 매핑되지만, 날짜, 숫자 포맷은 전문 송신처에 따라 포맷이 각각 달라 디테일한 처리가 필요하다. - e.g., 0.8%을 어디서는 00080000 으로 보내고, 어디서는 00.80으로 보냄. - padding도 어디서는 (0, LEFT)로, 어디서는 (' ', RIGHT) RIGHT로 할 수 있음 - 날짜를 어디서는 yyyyMMdd를 사용하고, 어디서는 yyMMdd 사용함. 따라서 전문 해석 케이스를 정리해보면, 크게 2가지 클래스가 필요하다. class A ⇒ fieldSet에서 꺼내서 type 변환하고, align에 따라 padding ..
전문 해석기 배치 LineMapper - TelegramFieldSetMapper
전문 해석기 배치 LineMapper - TelegramFieldSetMapper
2023.07.26RecordFieldSetMapper로 모든 케이스의 전문 변환이 커버 가능할까? => 아니다. public interface ConversionService { override fun convert(source: Any?, sourceType: TypeDescriptor?, targetType: TypeDescriptor): Any? } // 위 메서드는 아래 호출 구문을 통해서 넘어오는데... public class RecordFieldSetMapper implements FieldSetMapper { public T mapFieldSet(FieldSet fieldSet) { args[i] = this.typeConverter.convertIfNecessary(fieldSet.readRawString..
전문 해석기 배치 LineMapper - BeanWrapperFieldSetMapper와 RecordFieldSetMapper의 차이
전문 해석기 배치 LineMapper - BeanWrapperFieldSetMapper와 RecordFieldSetMapper의 차이
2023.06.29LineMapper는 크게 Tokenizer와 FieldSetMapper로 이루어진다. 전문 특성상 LineMapper로는 PatternMatchingCompositeLineMapper를 Tokeinizer로는 FixedLengthTokenizer를 사용하면 되는데 FieldSetMapper로는 세 가지 선택지가 있다. 1. BeanWrapperFieldSetMapper 2. RecordFieldSetMapper 3. 직접 구현 이 중 SpringBoot에서 기본 제공하는 1, 2에 대해 비교해보았다. class SampleModel() { var field1: String? = null var field2: Int? = null var field3: Double? = null var field4: Bi..
전문 해석기 배치 LineMapper - PatternMatchingCompositeLineMapper
전문 해석기 배치 LineMapper - PatternMatchingCompositeLineMapper
2023.06.22전문은 line의 맨 처음 시작 문자 (H, D, T 등)에 따라서 라인의 포맷, 필드가 달라진다. 배치에서 파일을 읽어와 맨 처음 시작 문자를 보고, 적절하게 분기해서 lineMapping 해야 하는 상황이었다. 기존 코드에서는 FlatFileItemReader를 상속한 TelegramFileItemReader가 있고, 여기서 LineMapper들을 가지고 있으면서, 분기처리해서 적절한 lineMapper를 불러주는 방식으로 처리하고 있었다. 헌데 내 생각에는 FlatFileItemReader는 resource에서 data를 읽어오는 책임이지, 읽어온 line 내부에 대해서는 관여하지 않는게 좋아보였다. 말 그대로 FileItemReader니까, FileItemRead만 제대로 하면 OK인 것이고, 상..
[Spring Batch] cli 실행 - JobLauncherApplicationRunner
[Spring Batch] cli 실행 - JobLauncherApplicationRunner
2023.06.16SpringBoot 안쓰는 경우 - CommandLineJobRunner Configuring and Running a Job Because the script launching the job must kick off a Java Virtual Machine, there needs to be a class with a main method to act as the primary entry point. Spring Batch provides an implementation that serves just this purpose: CommandLineJobRunner. It’s i docs.spring.io 공식 docs 참고 - https://docs.spring.io/spring-batch/docs/4.3..
Spring Boot 3 에서 변경된 부분 (Batch)
Spring Boot 3 에서 변경된 부분 (Batch)
2023.06.14https://www.baeldung.com/spring-boot-3-migration#spring-batch 6.1. @EnableBatchProcessing Discouraged Previously, we could enable Spring Batch’s auto-configuration, annotating a configuration class with @EnableBatchProcessing. The new release of Spring Boot discourages the usage of this annotation if we want to use autoconfiguration. In fact, using this annotation (or defining a bean that implem..
Spring Batch Multi-threaded Step 사용 시 chunk 구성에 대한 오해
Spring Batch Multi-threaded Step 사용 시 chunk 구성에 대한 오해
2022.12.16개요 Spring Batch에서는 다양한 병렬 처리 방식을 지원하고 있습니다. AsyncItemProcessor / AsyncItemWriter Multi-threaded Step Parallel Steps Externalizing Batch Process Execution [Spring Batch] 병렬 처리 이 중 Multi-threaded Step 방식에 대해 간단히 설명하고, chunk 구성 관점에서 제가 잘못 이해하고 있었던 부분에 대해 얘기하려 합니다. Multi-threaded Step 방식의 병렬 처리 Multi-threaded Step 방식은 step build 시 `` .taskExecutor()``를 붙여주면, 한 Step 내에서 chunk 단위로 병렬 처리되는 방식입니다. 기존 코드..
[Spring Batch] 병렬 처리 방법 모음
[Spring Batch] 병렬 처리 방법 모음
2022.09.15Spring Batch에서 지원하는 배치 병렬 처리 방식 AsyncItemProcessor / AsyncItemWriter → 한 step 내에서 processor만 병렬 수행해야 할 때 Multi-threaded Step → 한 step 내에서 reader, processor, writer를 chunk 단위로 병렬 수행해야 할 때 Parallel Steps → 여러 step들을 병렬로 수행해야 할 때 Externalizing Batch Process Execution → 외부 remote 서버에서 병렬 수행 필요할 때. (master-worker 모델) Remote Chunking of Step → 스텝 내의 Processor, Writer가 무거운 작업이라 외부 remote 서버들에서 병렬로 돌리고 ..
[Spring Batch] Scoped Bean 초기화 시 생성자 로깅 누락 문제
[Spring Batch] Scoped Bean 초기화 시 생성자 로깅 누락 문제
2022.07.27이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[Spring Batch] FileItemWriter
[Spring Batch] FileItemWriter
2022.05.16JsonFileItemWriter java docs code `` [ {json object}, {json object}, {json object} ]`` 형식으로 만들 때. 근데 spring-batch-core 4.1 부터 지원이라... 구버전에는 없다. 구버전에서는? 구버전에서는 FlatFileItemWriter를 쓰거나 직접 ItemWriter 작성해야 하는데 그나마 FlatFileItemWriter가 좀 더 고수준이라 이걸 쓰는게 낫다. (덮어쓰기, 기존 파일 존재하면 삭제 등 설정 가능) 근데 문제는 `` [ {json object}, {json object}, {json object} ]`` 형식으로 만들기가 까다롭다는 점이다. (맨 앞과 뒤에 구분자 , 가 들어간다. JsonFileItemW..