때 데이터의 PostgreSQL의 새로운 배치, 데이터 대량의 양이 비정상적 IO의 결과로, 너무 많이 삽입
단지 처음 나누어 져 너무 많은 데이터를 다음 대량 삽입을 넣어하지만,이 방법으로 느낌이 최적의 솔루션이 아닙니다 수 일시적으로 다음과 같이 특정 목록 분할은 입고 :
패키지 cn.ucmed.otaka.healthcare.cloud.util; 수입 java.util.HashMap에; 수입 은 java.util.List; 수입 java.util.Map; 공공 클래스 PartitionArray <T> { 공공 지도 <정수, 목록 <T >> 파티션 (목록 <T> TArrayNoInit이, INT의 용량) { 경우 (tArray.isEmpty () || 용량 <1 ) { 반환 널 (null) ; } 지도 <정수 목록 <T >> 결과 = 새 의 HashMap <> (); INT의 크기 = tArray.size (); INT카운트 = ((더블) Math.ceil (크기 1.0 * / 용량))있는 intValue ().; 위한 ( int로 I = 0; I ++가 나는 카운트 < ) { INT의 단부 = 용량 *는 (i + 1 ); 경우 (단> 사이즈) = 최종 크기; result.put (I, tArray.subList (용량 * I, 단부)); } 반환 결과; } }
원래 통화 볼륨을 처리 할 경우 :
시도 { PartitionArray <MDynamicFuncReleaseHistory> = partitionArray 새로운 PartitionArray <> (); 지도 <정수, 목록 <MDynamicFuncReleaseHistory >> batchList = partitionArray.partition (releaseHistoryList, INSERT_CAPACITY); batchList.forEach ((K, V) -> { mDynamicFuncReleaseHistoryMapper.batchInsert (V)] }); } 캐치 (예외 전자) { log.error (e.getMessage ()); 던져 새로운 BusinessException (500, "新增MDynamicFuncReleaseHistory失败" ); }