PSQLException는 : 백엔드에 보내는 동안 I / O 오류가 발생했습니다.

때 데이터의 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失败" ); 
        }

 

추천

출처www.cnblogs.com/miaoying/p/11227519.html