spring-boot - 是否可以管理 Spring 中事务的连接接收(视图中打开会话模式)?
问题描述
我使用 Spring boot 来简化配置工作。
当 RestController 自动收到对它的请求时(这是默认操作),从数据源分配连接,直到传输完成,连接打开。(至少我有这样的信息,你可以更正)。
In 是一种模式:Open Session In View。
Spring Boot中的OSIV是使用OpenEntityManagerInViewInterceptor Web 请求拦截器类实现的。与纯 Spring 不同,这里默认启用。
但是在执行事务方法之前,这个请求可能会延迟到业务逻辑层进行处理,连接是“空闲的”。这会导致连接泄漏。
使用 Srpingboot 时,您似乎可以控制连接的输出。
但是这是怎么做的呢?
请举个例子。
解决方案
第一的。您应该禁用模式 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(),因为它形成的不是一个,而是几个查询来获取相关表。
推荐阅读
- flutter - 底部溢出 100.0 pxl
- javascript - Nest 无法识别来自 fetch 请求的 POST
- raspberry-pi3 - 启动和重启后,如何在后台运行 rapberry pie 中的 python 代码?
- android - react-native-reanimated:androidJavadoc 错误在 android 设备上运行 react-native 应用程序
- dpdk - DPDK 在一个端口上获得太多 rx_crc_errors
- json - 使用 VBA-JSON 库将 excel 数据转换为 json
- java - 在 Android Java 中调用另一个类中的函数
- javascript - Python 和 JavaScript 链接
- reactjs - 具有 React 上下文的当前用户
- mysql - MySQL在加入后得到两条最近的记录