1) pom.xml 에 commons-lang3 라이브러리 추가 (테스트 데이터 랜덤 문자열 생성에 사용)
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
2) applicaiton.properties jdbcUrl 에 옵션 추가 => ?allowMultiQueries=true
예)
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/DB명?characterEncoding=UTF-8&serverTimezone=UTC&allowMultiQueries=true
3) logback-default.xml 에 root level info 로 변경 ( 로그를 보기위한)
<root level="info"> <!-- 3.유형 로그 사용 --> <appender-ref ref="fileAppender" /> </root>
4) Board.xml 에 saveList 쿼리 추가 foreach 사용하여 배열 INSERT QUERY 사용
<insert id="saveList" >
INSERT INTO T_BOARD ( TITLE, CONTENTS, REG_DATE )
VALUES
<foreach collection="boardList" item="board" separator=",">
( #{board.title}, #{board.contents}, NOW() )
</foreach>
</insert>
5) BoardRepository 에 saveList 관련 기능 추가
/** 게시판 Repository */
@Repository
public interface BoardRepository {
public void saveList(Map<String, Object> paramMap);
}
6) BoardController, BoardService saveList1, saveList2 1000 건 데이터 생성
BoardService
/** 단순 반복문을 이용한 등록 처리 */
public void saveList1(List<BoardDTO> list) {
for(BoardDTO dto : list) {
boardRepository.save(dto);
}
}
/** 100개씩 배열에 담아서 일괄 등록 처리 **/
public void saveList2(List<BoardDTO> boardList) {
Map<String, Object> paramMap=new HashMap<>();
paramMap.put("boardList", boardList);
boardRepository.saveList(paramMap);
}
BoardApiController
/**대용량 등록 처리1 **/
@ApiOperation(value="대용량 등록처리1" , notes="대용량 등록처리1")
@PutMapping("/saveList1")
public BaseResponse<Boolean> saveList1(){
int count=0;
//테스트를 위한 랜덤 1000 건의 데이터를 생성
List<BoardDTO> list=new ArrayList<BoardDTO>();
while(true){
count++;
String title=RandomStringUtils.randomAlphabetic(10);
String contents=RandomStringUtils.randomAlphabetic(10);
list.add(BoardDTO.builder().title(title).contents(contents).build());
if(count >1000) {
break;
}
}
long start =System.currentTimeMillis();
boardService.saveList1(list);
long end =System.currentTimeMillis();
log.info("실행 시간 : {}", (end-start) / 1000.0);
return new BaseResponse<Boolean>(true);
}
/**대용량 등록 처리2 **/
@ApiOperation(value="대용량 등록처리2" , notes="대용량 등록처리2")
@PutMapping("/saveList2")
public BaseResponse<Boolean> saveList2(){
int count=0;
//테스트를 위한 랜덤 1000 건의 데이터를 생성
List<BoardDTO> list=new ArrayList<BoardDTO>();
while(true){
count++;
String title=RandomStringUtils.randomAlphabetic(10);
String contents=RandomStringUtils.randomAlphabetic(10);
list.add(BoardDTO.builder().title(title).contents(contents).build());
if(count >1000) {
break;
}
}
long start =System.currentTimeMillis();
boardService.saveList2(list);
long end =System.currentTimeMillis();
log.info("실행 시간 : {}", (end-start) / 1000.0);
return new BaseResponse<Boolean>(true);
}
소스 :

















댓글 ( 4)
댓글 남기기