Я пытаюсь использовать SpringBoot JPA для вставки около 100 тыс. Элементов (сущностей) в базу данных. Но JVM не хватает памяти.
try (Stream<Path> paths = Files.walk(Paths.get(this.folderPath))) {
paths.filter(Files::isRegularFile).map(Parser::parse).forEach(item -> {
log.debug("Load trade : " + item.getId());
itemService.save(item);
});
}
, где itemService - это сервис, который использует ItemRepository, а ItemRepository - репозиторий JPA:
ItemRepository extends JpaRepository<Item, String> {}
В Applicateion.yml я поместил следующеенастройки и надеюсь, что это поможет избежать утечки памяти:
jpa:
properties:
hibernate:
generate_statistics: true
jdbc.batch_size: 2000
Насколько я понимаю, это будет выполнять пакетную вставку для каждых 2000 экземпляров и освобождать память после каждой пакетной вставки. Тем не менее, я все еще исчерпал исключение памяти. Мне кажется, что itemService задерживает все сделки, поэтому GC не выполняется.
Я новичок в JPA, и может кто-нибудь подсказать мне, что я могу сделать, чтобы избежать утечки памяти?
Оцените.