首页 > 解决方案 > 是否可以管理 Spring 中事务的连接接收(视图中打开会话模式)?

问题描述

我使用 Spring boot 来简化配置工作。

当 RestController 自动收到对它的请求时(这是默认操作),从数据源分配连接,直到传输完成,连接打开。(至少我有这样的信息,你可以更正)。

In 是一种模式:Open Session In View

Spring Boot中的OSIV是使用OpenEntityManagerInViewInterceptor Web 请求拦截器类实现的。与纯 Spring 不同,这里默认启用。

但是在执行事务方法之前,这个请求可能会延迟到业务逻辑层进行处理,连接是“空闲的”。这会导致连接泄漏。

使用 Srpingboot 时,您似乎可以控制连接的输出。

但是这是怎么做的呢?

请举个例子。

标签: spring-bootresttransactionsjava-11

解决方案


第一的。您应该禁用模式 Open Session in View

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(),因为它形成的不是一个,而是几个查询来获取相关表。


推荐阅读