Сеанс Spring Data Neo4j кэширует все сущности, извлеченные из базы данных - PullRequest
1 голос
/ 21 января 2020

У меня есть приложение Spring Boot, которое использует драйвер Neo4j через данные String для запроса базы данных. Характер приложения таков, что ему необходимо выполнять итерацию практически по всем узлам базы данных. Неизменное приложение перестает работать с OutOfMemoryError.

Приложение имеет службу, которая вызывает Neo4j в al oop каждый раз, получая порядка 10000 объектов из базы данных.

Исследование поведения приложения в профилях памяти VisualVM показало, что сеанс Neo4J, похоже, удерживает все объекты, извлеченные во всех итерациях. Это явно не желаемое поведение. Приложение только для чтения, оно не намеревается вносить какие-либо изменения в эти объекты.

Мы пробовали различные изменения, связанные с поведением транзакций - без использования аннотации @Transactional, помечая транзакции как доступные только для чтения, ничто не меняет факт что объекты, извлеченные из базы данных, не являются сборщиком мусора.

Как отключить поведение транзакций или иным образом заставить драйвер Neo4j перестать удерживать объекты, считанные из Neo4j, с помощью декларативных запросов Cypher.

...