#spring-boot #rest #transactions #java-11
Вопрос:
Я использую Spring boot для упрощения работы с конфигурацией.
Когда RestController автоматически получает запрос на это (это действие по умолчанию), Соединение выделяется из источника данных и до завершения передачи Соединение открыто. (по крайней мере, у меня есть такая информация, вы можете ее исправить).
В режиме: Открыть Сеанс В Поле Зрения.
OSIV в Spring Boot реализован с использованием класса перехватчика веб-запросов OpenEntityManagerInViewInterceptor. В отличие от pure Spring, он включен здесь по умолчанию.
Но перед выполнением транзакционного метода этот запрос может быть отложен на уровне бизнес-логики для обработки, и соединение «простаивает». Это приводит к утечкам в соединении.
Похоже, что вы можете контролировать вывод соединения при использовании Srpingboot .
Но как это делается ?
Пожалуйста, приведите пример.
Ответ №1:
Первый. Вы должны отключить режим Открытого сеанса в поле зрения.
spring.jpa.open-in-view=false
Затем вы должны использовать аннотацию @EntityGraph.
public interface UserRepository extends CrudRepository<User, Long> {
@EntityGraph(attributePaths = "departments")
Optional<User> findDetailedByUsername(String username);
Optional<User> findByUsername(String username);
}
Остерегайтесь использования функции Hibernate.initialize(), поскольку она формирует не один, а несколько запросов для получения связанных таблиц.