JPA 데이터를 읽으려면 EntitiyManagerFactory가 필요하다
처음에 EntityManager 주입받을 떄 @PersistenceContext로 주입받았던 기억이 있어 생성자 주입이 아닌 이 방식으로 주입하려 하다 에러가 계속났었다. 생성자 주입방식을 했어야 했던게 결국 맞았었다.
jobBuilderFactory, stepBuilderFactory, entityManagerFacotry 를 주입받는다.
Job Step
JpaPagingItemReader를 사용하여 데이터를 읽어들였다. 여기서는 pageSize를 설정할 수 있는데 분명 위에 Step에서도 chunkSize를 설정하기에 어떤 사이즈를 정하는 건지 알기 어려워 콘솔에 결과로 알게 되었다!
일단 JpaPagingItemReader를 보면
name은 이름을 설정하고
entityManagerfactory는 맨 위에서 주입받은 EntityManagerFactory를 그대로 넣었다.
queryString은 JPQL 방식으로 쿼리를 적어주면 된다. 쿼리에는 파라미터가 들어가는 경우를 생각해서 파라미터 넣는 방식으로 구성하였다. 파라미터는 parameterValues를 이용해서 Map 으로 넣어주면 된다.
ItemWriter
간단히 데이터만 출력할 정도로 코드를 적었다.
그런데 위에서 말한 chunkSize와 pageSize를 구분할 필요가 있다고 생각했다.
결과는 이렇게 나온다. 결과를 보고 확실하게 알게 되었는데 위에 코드에서는 chunkSize는 20이고 pageSize 10 으로 설정했다. 결국 20개에 chunkSize의 데이터를 불러오기 위해 select .....limit 10 을 두번 반복한 것이다. 이런 경우는
pageSize를 chunkSize와 맞추면 쓸데없이 쿼리가 생기지 않는다!
'Spring Batch' 카테고리의 다른 글
Spring batch - ChunkListener, StepListener (0) | 2022.12.28 |
---|---|
Spring Batch - csv 파일 읽기 (0) | 2022.12.26 |
Spring Batch - csv파일 쓰기 (0) | 2022.12.23 |
Spring Batch - JdbcCursorItemReader (0) | 2022.12.22 |
SpringBatch ChunkSize를 JobParameters 로 사용하기 (1) | 2022.12.19 |