gpt4 book ai didi

spring - 应如何在 (Spring MVC) Web 请求中处理 SessionFactory 实例?

转载 作者:行者123 更新时间:2023-12-01 11:19:27 26 4
gpt4 key购买 nike

这是一个非常基本的问题,但我需要帮助。假设我们在 spring 中创建一个单例 bean,然后 spring ioc 将创建该特定 bean 的单个实例,并在某种代码需要时将其注入(inject)。这很好。但我对多线程环境将如何管理它感到困惑。就像我们在 spring 中创建一个 sessionFactory bean 作为单例,然后向需要 sessionFactory bean 的特定 rest url 发出许多请求。 spring 框架如何为那么多请求提供单个 bean 实例。

最佳答案

您是在谈论持久性提供程序 session 工厂,例如Hibernate SessionFactory

这个工厂应该为每个 DataSource 存在一次,因为它的创建成本并不低(连接处理、内存消耗),而且绝对应该在整个应用程序生命周期中重复使用,所以单例是此时的方法。工厂是不可变的(线程安全的),不会有并发问题。

每个传入线程(由网络请求创建)都应该重用这个工厂来创建它自己的 session ,并且这个 session 应该用于这个线程,无论它被访问的频率如何(例如,存储在线程局部变量中)。

例如如果我们现在在抽象层中向上移动到 JPA 级别,JPA EntityManagerFactory正在包装 Hibernate SessionFactory,如果您想将 JPA pendant 用于 Hibernate Session - EntityManager - 如果你想让 Spring 管理它,你会得到一个像这样的 EntityManager 代理:

@PersistenceContext
private EntityManager entityManager;

这将为您的业务代码提供当前线程的 EntityManager 代理(包装的 session )。

如果您使用 Spring Data JPA,则同样适用于下一个抽象级别,它是存储库和 @Transactional 方法。在这种情况下,Spring 也会为您处理。

关于spring - 应如何在 (Spring MVC) Web 请求中处理 SessionFactory 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45643203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com