방법 1. subList 메서드를 이용한 방법.
for (int i = 0; i < data.size(); i += 1000) {
memberMapper.bulkRegister(data.subList(i, Math.min(i + 1000, data.size())));
}
- subList를 활용한 방법은 OOME를 야기 할 수 있다.
subList를 활용해서 쪼개진 List를 만들 때 마다 constructor에서 새로운 List를 할당해 주기 때문이다.
방법 2. 단순 반복문으로 매 1000건 마다 insert 해주는 방식.
List<Member> partedData = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
partedData.add(data.get(i));
if ((i + 1) % 1000 == 0 || (i + 1) == data.size()) {
memberMapper.bulkRegister(insertData);
partedData.clear();
}
}
방법3. google의 guava나 apache common의 ListUtils의 partitionList 메서드를 활용.
그런데 위 라이브러리의 메서드도 내부적으로 들어가보면 결국 subList를 사용하고 있기 때문에
방법2가 가장 나아 보인다.
'☕️Java > Java Basic' 카테고리의 다른 글
Java의 날짜 API 변천사. (0) | 2022.12.12 |
---|---|
Java partition list by size. (0) | 2021.08.18 |
new BigDecimal과 BigDecimal.valueOf의 차이. (0) | 2021.01.13 |
BigDecimal의 toString 들. (0) | 2021.01.13 |
BigDecimal - stripTrailingZeros() (0) | 2021.01.13 |