gpt4 book ai didi

spring - Spring 和 Java EE 中的 @PersistenceContext EntityManager 线程安全

转载 作者:IT老高 更新时间:2023-10-28 13:44:10 24 4
gpt4 key购买 nike

EntityManager 根据定义不是线程安全的。Servlets 规范说,在非分布式环境中并且没有实现 SingleThreadModel每个定义只有一个 servlet 实例

因此,在 Java EE 中,当您通过 @PersistenceContextEntityManager 注入(inject) Servlet 的字段时 - 它不是线程安全的:

public class MyServlet extends HttpServlet {

// Not thread-safe, should be using EMF instead.
@PersistenceContext
private EntityManager em;
}
  1. 这样说是否正确,即使 Spring bean 的默认范围是单例的,但 EntityManager 是线程安全的,因为 Spring 使用 ThreadLocal 进行绑定(bind)它的事务和 EntityManager 到它?

  2. 上面的 Servlets 示例在 Spring 中仍然有效吗?它仍然不是线程安全的吗?

  3. ThreadLocal 方法是否仅适用于 Spring 托管 bean 而普通 servlet 不是其中之一?

  4. 据我所知,注入(inject) EntityManager 是容器的责任。在 Glassfish Java EE 实现中,发现 @PersistenceContext 作为注入(inject)点的是应用服务器。
    Spring 的时候是什么样子的? Spring Framework 是负责发现这些注释还是由 JPA 实现者负责?

最佳答案

问题 2、3 和 4——Spring 不关注任何不是 Spring Bean 的类。因此 Spring 不会关注你的 MyServlet 类。因此

的答案
  • 2) 不是
  • 3) 仅限 Spring 托管的 Beans
  • 4) 这是 Springs 的责任,因为 Spring 是容器

对于问题 1)。它以这种方式工作,因此使用 Spring Injected Entity Manager 可以有效地节省线程。

关于spring - Spring 和 Java EE 中的 @PersistenceContext EntityManager 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380539/

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