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를 처리하는 방법도 있다. 이에 대해선 따로 포스팅할 예정이다.

참고

https://nakanara.tistory.com/265

https://aljjabaegi.tistory.com/577

728x90
반응형