java
[java] Spring JDBC에서 배치처리하기
우주유령
2023. 1. 17. 09:39
728x90
반응형
mybatis에서 아래와 같이 코드를 잘 경우 foreach문을 너무 많이 돌아서 일정 byte이상을 넘게되면 에러가 난다.
INSERT INTO L_OP_BIT_IMG_TRNS (
TRNS_DTM
, SEQ
, IMG_CLSS
, TITL
, ISTC
, DSPY_TIME
, FILE_NM
, STRT_DTM
, END_DTM
, OPRR_ID
, IMG_VRSN_ID
)
SELECT TRNS_DTM
, SEQ
, IMG_CLSS
, TITL
, ISTC
, DSPY_TIME
, FILE_NM
, STRT_DTM
, END_DTM
, OPRR_ID
, IMG_VRSN_ID
FROM (
<foreach collection="imgList" item="items" open="(" close=") A" separator="UNION ALL">
SELECT SYSDATE TRNS_DTM
, #{items.seq} SEQ
, #{items.imgClss} IMG_CLSS
, #{items.titl} TITL
, #{items.istc} ISTC
, #{items.dspyTime, jdbcType=INTEGER} DSPY_TIME
, #{items.fileNm} FILE_NM
, TO_DATE(#{items.strtDtm}, 'YYYY-MM-DD HH24:MI:SS') STRT_DTM
, TO_DATE(#{items.endDtm}, 'YYYY-MM-DD HH24:MI:SS') END_DTM
, #{oprrId} OPRR_ID
, #{imgVrsnId} IMG_VRSN_ID
FROM DUAL
</foreach>
이런 insert문을 사용할 때 대용량 데이터를 넘겨야 한다면 mybatis에서는 에러가 날 수 밖에 없으므로 batch방식을 사용해야 한다.
배치처리란, 빅데이터 등 대용량 데이터에서 사용하는 방식으로, 초, 분, 시, 일, 월단위 등 데이터를 모았다가 한번에 처리하는 방식을 말한다.
jdbc에 직접 연결해서 batch 방식을 사용해 보자
jdbc가 아닌, spring에서 batch를 처리하는 방법도 있다. 이에 대해선 따로 포스팅할 예정이다.
참고
728x90
반응형