ItemWriter
Reader์ Processor๋ฅผ ๊ฑฐ์ณ ์ฒ๋ฆฌ๋ Item์ Chunk ๋จ์๋งํผ ์์ ํ ์ด๋ฅผ Writer์ ์ ๋ฌํ๊ณ , ItemWriter๋ ๋ฐฐ์น์ ์ถ๋ ฅ์ ๋ด๋นํ๋ค.
public interface ItemWriter<T> {
void write(List<? extends T> var1) throws Exception;
}ItemWriter์ write()๋ ์ธ์๋ก Item List๋ฅผ ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. Spring Batch์์๋ ๋ค์ํ Output ํ์
์ ์ฒ๋ฆฌํ ์ ์๋๋ก Writer๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
Database Writer
JdbcBatchItemWriter
HibernateItemWriter
JpaItemWriter
๋ค์ 3๊ฐ์ง Writer๊ฐ ์์ผ๋ฉฐ, Database์ ์์์ฑ๊ณผ ๊ด๋ จํด์๋ ํญ์ Flush๋ฅผ ํด์ค์ผํ๋ค. Writer๊ฐ ๋ฐ์ ๋ชจ๋ Item์ด ์ฒ๋ฆฌ ๋ ํ์ Spring Batch๋ ํ์ฌ ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ค.
JdbcBatchItemWriter
ORM์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๋๋ถ๋ถ JdbcBatchItemWriter๋ฅผ ์ฌ์ฉํ๋ค.
JdbcBatchItemWriter๋ JdbcTemplate์ ์ฌ์ฉํ๋ฉฐ, JDBC์ Batch ๊ธฐ๋ฅ์ ์ฌ์ฉํด ํ๋ฒ์ DB๋ก ์ ๋ฌํ์ฌ DB๋ด๋ถ์์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋๋ก ํ๋ค. ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์๋ฅผ ์ต์ํํ์ฌ ์ฑ๋ฅํฅ์์ ํ ์ ์๋๋ก ํ๊ธฐ ์ํด์๋ค.
์ด๋ write()๋ฉ์๋๋ฅผ ๋ณด๋ฉด SQL๋ฌธ์ ํ๋ฒ์ฉ ํธ์ถํ๋ ๊ฒ์ด ์๋ batchUpdate๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ์ผ๊ด์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์ ์ํฌ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์คํ์ ํธ๋์ญ์
๋ด์์ ํ ์ ์๋ค.
assertUpdates
boolean
true
true์ด๋ฉด ๋ชจ๋ ์์ดํ
์ด ์ฝ์
์ด๋ ์์ ๋์๋์ง ๊ฒ์ฆํ๋ค.
์ฆ, ์ ์ด๋ ํ๋์ ํญ๋ชฉ์ด ํ์ ์
๋ฐ์ดํธ ํ๊ฑฐ๋ ์ญ์ ํ์ง ์์ ๊ฒฝ์ฐ ์์ธ(EmptyResultDataAccessException)๋ฅผ throwํ ์ง ์ค์ ํ๋ค.
dataSource
DataSource
null(ํ์)
ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ ๊ทผ ์ ๊ณต
sql
String
null(ํ์)
๊ฐ ์์ดํ ๋น ์ํํ SQL
itemPreparedStatementSetter
ItemPreparedStatementSetter
null
ํ์ค PreparedState๊ฐ ์ ๊ณต๋๋ค๋ฉด(ํ๋ผ๋ฏธํฐ ์์น์ ?์ฌ์ฉ), ์ด ํด๋์ค๋ฅผ ์ฌ์ฉํด ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ฑ์
itemSqlParameterSourceProvider
ItemSqlParameterSourceProvider
null
์ ๊ณต๋ SQL์ ๋ค์๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ์ฉ๋๋ค๋ฉด, ์ด ํด๋์ค๋ฅผ ์ฌ์ฉํด ํ๋ผ๋ฏธํฐ ๊ฐ ์ฑ์
simpleJdbcTemplate
SimpleJdbcTemplate
null
SimpleJdbcOperations ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ๊ฐ๋ฅ
afterPropertiesSet
๊ฐ๊ฐ Writer๋ค์ด ์คํ๋๊ธฐ ์ํด ํ์ํ ํ์ ๊ฐ๋ค์ด ์ ๋๋ก ์ธํ ๋์ด ์๋์ง ํ์ธ
JdbcBatchItemWriterBuilder
JdbcBatchItemWriterBuilder๋ ๋ค์ 3๊ฐ์ง ์ค์ ๊ฐ์ ๊ฐ๊ณ ์๋ค.
assertUpdates
boolean
true
true์ด๋ฉด ๋ชจ๋ ์์ดํ
์ด ์ฝ์
์ด๋ ์์ ๋์๋์ง ๊ฒ์ฆํ๋ค.
์ฆ, ์ ์ด๋ ํ๋์ ํญ๋ชฉ์ด ํ์ ์
๋ฐ์ดํธ ํ๊ฑฐ๋ ์ญ์ ํ์ง ์์ ๊ฒฝ์ฐ ์์ธ(EmptyResultDataAccessException)๋ฅผ throwํ ์ง ์ค์ ํ๋ค.
columnMapped
Key, Value ๊ธฐ๋ฐ์ผ๋ก Insert SQL์ Values๋ฅผ ๋งคํํ๋ค.
beanMapped
POJO ๊ธฐ๋ฐ์ผ๋ก Insert SQL์ Values๋ฅผ ๋งคํํ๋ค.
columnMapped
beanMapped
afterPropertiesSet
์ด ์ธ์ afterPropertiesSet()๋ฉ์๋๋ฅผ ์ถ๊ฐ๋ก ์๊ณ ์์ผ๋ฉด ์ข๋ค. ์ด ๋ฉ์๋๋ InitalizingBean ์ธํฐํ์ด์ค์์ ๊ฐ๊ณ ์์ผ๋ฉฐ, ItemWriter ๊ตฌํ์ฒด๋ค์ ๋ชจ๋ InitializingBean ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
์ด ๋ฉ์๋๋ ๊ฐ๊ฐ Writer๋ค์ด ์คํ๋๊ธฐ ์ํด ํ์ํ ํ์ ๊ฐ๋ค์ด ์ ๋๋ก ์ธํ ๋์ด ์๋์ง ํ์ธํ๋ค. Writer ์์ฑ ํ ํด๋น ๋ฉ์๋๋ฅผ ์คํํ๋ฉด ์ด๋ ๊ฐ์ด ๋๋ฝ๋์๋์ง ์ ์ ์์ด์ ๋ง์ด ์ฌ์ฉํ๋ ์ต์ ์ด๋ค.
HibernateItemWriter
org.springframework.batch.item.database.HibernateItemWriter
HibernateItemWriter์์ ๊ฐ ์์ดํ
์ ๋ํด session.saveOrUpdate ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉฐ, ๋ชจ๋ ์์ดํ
์ด ์ ์ฅ๋๊ฑฐ๋ ์์ ๋๋ฉด flush ๋ฉ์๋๋ฅผ ํตํด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ๋ฒ์ ์คํํ๋ค.
์์กด์ฑ ์ถ๊ฐ
ํ๋กํผํฐ ์ค์
JPA ์ด๋
ธํ
์ด์
์ถ๊ฐ
Configurer ์์ฑ
HibernateTransactionManager๋ฅผ ํธ๋์ญ์
์ผ๋ก ์ค์ ํด์ค๋ค.
JpaItemWriter
ORM์ ์ฌ์ฉํ ๋, Writer์ ์ ๋ฌํ๋ ๋ฐ์ดํฐ๊ฐ Entity ํด๋์ค์ธ ๊ฒฝ์ฐ JpaItemWriter๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. JpaItemWriter๋ JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด EntityManager๋ฅผ ํ ๋นํด์ค์ผํ๋ค.
์ผ๋ฐ์ ์ผ๋ก spring-boot-starter-data-jpa๋ฅผ ์์กด์ฑ์ ๋ฑ๋กํ๋ฉด EntityManager๊ฐ Bean์ผ๋ก ์๋ ์์ฑ๋์ด DI์ฝ๋๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
afterPropertiesSet
JpaItemWriter์ afterPropertiesSet()์์๋ EntityManagerFactory ๋ง ํ์ ๊ฐ์ผ๋ก ํ์ธํ๊ณ ์์ด ์ฒดํฌํ ์์๊ฐ ์ ๋ค. ์ฆ, setEntityManger๋ง ํด์ฃผ๋ฉด ๋ชจ๋ ์ค์ ์ด ๋๋๋ค.
write()
JpaItemWriter์ doWrite()๋ฅผ ๋ณด๋ฉด ๋์ด์จ item ๊ทธ๋๋ก entityManager.merge(item)๋ฅผ ์ํํ์ฌ ํ
์ด๋ธ์ ๋ฐ๋ก ๋ฐ์ํ๊ธฐ ๋๋ฌธ์, JpaItemWriter๋ Entity ํด๋์ค๋ฅผ ์ ๋ค๋ฆญ ํ์
์ผ๋ก ๋ฐ์์ผ๋ง ํ๋ค.
MyBatisBatchItemWriter
Step์์ ์ ์ํ Chunk Size(FetchSize)๋งํผ ์ฒ๋ฆฌํด์ฃผ๋ ค๋ฉด executorType์ BATCH๋ก ์ค์ ํด์ค์ผํ๋ค.
๊ทธ ๋ค์ ์ํํ ์ฟผ๋ฆฌ๋ฅผ mapper์ ์์ฑํด์ฃผ๊ณ ์ํํ๋ฉด ๋๋ค.
RepositoryItemWriter
์ฐ๊ธฐ ์์
์ํ์์๋ ํ์ด์ง์ด๋ ์ ๋ ฌ์ด ํ์์์ผ๋ฏ๋ก, CrudRepository๋ฅผ ์ฌ์ฉํ๋ค.
์์์ ๊ตฌํํ repository๋ฅผ ์ค์ ํด์ฃผ๊ณ , ํธ์ถํ ๋ฉ์๋๋ช ๋ง ์ง์ ํด์ฃผ๋ฉด๋๋ค.
Custom ItemWriter
Reader์๋ ๋ค๋ฅด๊ฒ Writer์ ๊ฒฝ์ฐ customํ๊ฒ ๊ตฌํํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Reader์์ ์ฝ์ด์จ ๋ฐ์ดํฐ๋ฅผ RestTemplate์ผ๋ก ์ธ๋ถ API๋ฅผ ์ ๋ฌํด์ผํ๋ ๊ฒฝ์ฐ
์์ ์ ์ฅ์ ํ๊ณ ๋น๊ตํ๊ธฐ ์ํด singleton ๊ฐ์ฒด์ ๊ฐ์ ๋ฃ์ด์ผํ๋ ๊ฒฝ์ฐ
์ฌ๋ฌ Entity๋ฅผ ๋์์ ์ ์ฅํด์ผํ๋ ๊ฒฝ์ฐ
๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ์ํฉ์ด ์์ ์ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ItemWriter ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํ๋ฉด ๋๋ค.
java7 ์ดํ
java8 ์ด์(ItemWriter์ ์ถ์๋ฉ์๋๊ฐ
write()ํ๊ฐ ์ด๋ฏ๋ก ๋๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ)
๋ค์๊ณผ ๊ฐ์ด write()ํจ์๋ฅผ @Overrideํ๋ฉด ๊ตฌํ์ฒด ์์ฑ์ ๋๋๋ค.
์ฐธ๊ณ
Last updated
Was this helpful?