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)
댓글 남기기