반응형
이전에 포스팅에서 배치에 대해서 소개 및 용어 정리를 했었다.
자세한 내용은 참고 포스팅 참고 바란다.
이번 포스팅에서는 Java 프로젝트 위에 올려볼 예정이다.
먼저 사용을 위해서는 Maven 등록을 해준다.
..이상 생략 <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-test</artifactId> <scope>test</scope> </dependency> ..이하 생략 |
그리고 main 메서드 위에 배치 사용을 위한 annotation을 달아준다.
@EnableBatchProcessing @SpringBootApplication public class TestBatchApplication { public static void main(String[] args) { SpringApplication.run(TestBatchApplication.class, args); } } |
그리고 Job과 Step 을 위한 패키지를 구분하였다.
-Job
-Step
---Chunk
---Tasklet
이렇게 트리구조 이다.
Chunk 방식에 대한 예제는 아래와 같다.
Chunk
JobConfig
@Slf4j @Configuration @RequiredArgsConstructor public class TestJobConfig { private final JobRepository jobRepository; private final TestStepConfig testStepConfig; @Bean public Job testChunkJob(){ return new JobBuilder("testChunkJob", jobRepository) .start(testStepConfig.testChunkStep()) .build(); } } |
StepConfig
@Configuration @RequiredArgsConstructor public class TestStepConfig { private final PlatformTransactionManager platformTransactionManager; private final JobRepository jobRepository; @Value(value="1000") private Integer chunkSize; private final TestItemReader reader; private final TestItemProcessor processor; private final TestItemWriter writer; @Bean public Step testChunkStep() { return new StepBuilder("testChunkStep", jobRepository) .<TestTableDto,TestTableDto>chunk(chunkSize,platformTransactionManager) .reader(reader.reader()) .processor(processor) .writer(writer.writer()) .build(); } } |
그리고 각각의 Reader, Processor, Writer 는 아래와 같다.
Reader | @RequiredArgsConstructor @Component public class TestItemReader extends BatchDbItemReader<TestTableDto>{ private String mthdNm; private Integer chunkSize = 10; private Map<String, Sort.Direction> sort; private final DataSource dataSource; private String sql = TestSql.TEST_SQL_DTO_JDBC; private RowMapper<TestTableDto> rowMapper = new BeanPropertyRowMapper<>(TestTableDto.class); private Integer fetchSize; private Integer pageSize; private PagingQueryProvider provider; private Map<String, Object> params; /** * @return JdbcCursorItemReader<? extends TmpAgreecallr00Entt> */ public JdbcCursorItemReader<? extends TestTableDto> reader() { System.out.println("reader"); return super.reader(dataSource, sql, rowMapper); } } |
Processor | @RequiredArgsConstructor @Component @StepScope public class TestItemProcessor implements ItemProcessor<TestTableDto, TestTableDto>{ @Override public TestTableDto process(TestTableDto item) throws Exception { System.out.println("processor"); if (true){ item.setFctrN1("100"); }else { item.setFctrN1("200"); } return item; } } |
Writer | @RequiredArgsConstructor @Configuration public class TestItemWriter extends BatchDbItemWriter<TestTableDto> { private final DataSource dataSource; private String sql = TestSql.TEST_SQL_DTO_JDBC_INSERT; @Bean(name="testItemWriterBean") public JdbcBatchItemWriter<? super TestTableDto> writer(){ System.out.println("writer"); return super.writer(dataSource,sql); } } |
비고 >
Reader - 빨간 텍스트에 읽을 데이터의 쿼리를 넣어준다.
Processor - 빨간 텍스트 부분에 Writer 를 하기 위한 DTO set을 정의 및 변경 해준다.
Writer - 빨간 텍스트에 최종 DTO 로 할 작업의 쿼리를 적어준다.
참고 포스팅
https://thenicesj.tistory.com/308
https://thenicesj.tistory.com/937
반응형
댓글