Можно ли управлять получением Подключения для транзакции Весной (в режиме просмотра Открыта сессия)?

#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(), поскольку она формирует не один, а несколько запросов для получения связанных таблиц.