Spring Batch 8

Spring batch - ChunkListener, StepListener

이 예제는 Chunk기준으로 Lsitener을 구현했다. 다른 Step, Job도 크게 구현하는게 다르지 않다 ChunkPracListener 클래스 작성 ChunkListener을 implement해서 구현해서 Step에 등록해주면 된다. - beforeChunk >> 정크 시작전 - afterChunk >> 정크 끝난 후 - afterChunkError >> 에러날 경우 모두 ChunkContext를 매개변수로 받아서 StepExecution과 같이 Step 정보를 받아 활용할 수 도 있다. Step에서 listener을 등로해주면 정상작동한다. 정크 사이즈가 10이므로 10번마다 위에서 설정한 before과 after가 실행되는 것을 볼 수 있다. StepListener도 Step에서 등록하는데 같..

Spring Batch 2022.12.28

Spring Batch - JPA 데이터 읽기

JPA 데이터를 읽으려면 EntitiyManagerFactory가 필요하다 처음에 EntityManager 주입받을 떄 @PersistenceContext로 주입받았던 기억이 있어 생성자 주입이 아닌 이 방식으로 주입하려 하다 에러가 계속났었다. 생성자 주입방식을 했어야 했던게 결국 맞았었다. jobBuilderFactory, stepBuilderFactory, entityManagerFacotry 를 주입받는다. Job Step JpaPagingItemReader를 사용하여 데이터를 읽어들였다. 여기서는 pageSize를 설정할 수 있는데 분명 위에 Step에서도 chunkSize를 설정하기에 어떤 사이즈를 정하는 건지 알기 어려워 콘솔에 결과로 알게 되었다! 일단 JpaPagingItemReader를..

Spring Batch 2022.12.26

Spring Batch - csv 파일 읽기

ItemReaderPractiConfiguration 클래스를 만들어 Configuration 클래스로 등록하고 JobBuilderFactory와 StepBuilderFactory를 주입 받는다. incrementer 를 설정해 JobParameter를 각각 다르게 하여 동일한 Job을 실행 가능하게 한다. Job 에서 실행할 Step을 생성하는데 INPUT, OUTPUT 둘다 Person이다. (Chunk방식) ItemReader에서 CSV 파일을 읽으려면 FlatFileItemReader 객체를 이용해 읽어야 한다. public FlatFileItemReader csvReader() throws Exception{ DefaultLineMapper lineMapper = new DefaultLineMa..

Spring Batch 2022.12.26

Spring Batch - csv파일 쓰기

먼저 쓰는 코드 Job을 만들어주고 먼저 쓰기만 할 것이니 Step 설정을 start로 실행할 Step을 한 개만 지정한다. Chunk 방식 Step 생성 Step에 이름은 csvItemWriterStep으로 지정하고 정크에 INPUT, OUTPUT 타입은 모두 Person 객체로 지정했다. 여기서 ItemReader는 DB 값을 읽어와도 되지만 여기서는 테스트 데이터로 값만 확인할 수 있는 List를 만들어 실행한다. List 데이터를 받아야하기에 ListItemReader를 통해 읽어들였다. 테스트 데이터를 만들어주는 메소드이다. ItemWriter 메소드 BeanWrapperFieldExtractor -> csv 파일에 작성할 필드를 추출하기 위해 FieldExtractor 객체가 필요하다. Del..

Spring Batch 2022.12.23

Spring Batch - JdbcCursorItemReader

JDBC를 조회하는 방법은 크게 두가지이다. 1. Cursor 기반 조회(ResultSet에 cursor) - 배치 처리가 완료될때까지 DB Connection이 연결된다. - DB Connection 빈도가 낮아 성능이 좋은 반면, 긴 Connection 시간이 필요하다. - 하나의 Connection에서 처리 되기 때문에 Thread Safe하지 않다. 2. Paging 기반 조회 - 페이징 단위로 DB Connection 을 연결 - DB Connection 빈도가 높아 비교적 성능이 낮은 반면, 짧은 Connection 유지시간 필요 - 페이징 단위의 결과만 메모리에 할당하기 때문에[ 비교적 더 적은 메모리를 사용한다. 각각 JdbcCursorItemReader, JdbcPagingItemRead..

Spring Batch 2022.12.22

SpringBatch ChunkSize를 JobParameters 로 사용하기

JobParameters느 배치를 실행에 필요한 값을 parameter를 통해 외부에서 주입한다. JobParameters는 외부에서 주입된 Parameter를 관리하는 객체이다. Parameter를 접근하는 방법은 크게 두가지이다. JobParameters 객체를 통해 접근 ((contribution, chunkContext) -> { StepExecution stepExecution = contribution.getStepExecution(); JobParameters jobParameters = stepExecution.getJobParameters(); String param = jobParameters.getString("chunksize","10"); } 다른 방법은 @Value를 통한 접근(..

Spring Batch 2022.12.19

Spring Batch Chunk 기초학습

Batch를 처리할 수 있는 방법은 크게 2가지이다. 1. Tasklet을 사용항 Task기반 처리 - 배치 처리과정이 비교적 쉬운 경우 쉽게 사용한다. - 대량 처리를 하는 경우 더 복잡하다. - 하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기 부적합하다. 2. Chunk를 사용한 chunk(덩어리) 기반처리 - ItemReader, ItemProcessor, ItemWriter의 관계 이해필요하다. - 대량처리를 하는 경우 Tasklet보다 비교적 쉽게 구현가능 - 덩어리로 나누어 수행가능 코드 @Configuration @RequiredArgsConstructor public class Practice{ private final JobBuilderFactory jobBuilderFactory; p..

Spring Batch 2022.12.19

Spring Batch 동작 순서 (Step)

Batch는 Job 타입에 빈이 생성되면 Job launcher 객체에 의해서 Job을 실행한다. Job launcher가 Job을 실행하고 Job은 Step을 실행하게 되는 구조이다. 여기서 Job Repository라는 클래스가 등장하는데 이건 DB 또는 메모리에 Batch가 실행할 수 있도록 Meta 데이터를 관리하는 클래스이다. JOB은 Batch에 실행단위이고 Step은 Job에 세부 실행단위이다. Job은 n개에 Step을 실행할 수 있고 Step에 흐름을 관리할 수 있다 --> Job Flow 하나에 Job이 A Step을 실행한 후 조건에 따라 B Step 또는 C Step을 실행 할 수 있다. 아니면 모두를 설정도 가능하다. Step의 실행 단위 2가지 Chunk -> 하나의 큰 덩어리를..

Spring Batch 2022.12.16