blu*_*ker 8 java spring multithreading hibernate jpa
我们正在使用 Spring-Hibernate 设计一个应用程序,其中 6 个线程同时运行。每个线程执行不同的操作并在公共表中插入/更新一些记录(所有线程都在公共表上工作)。
虽然我们知道我们只能有一个 的实例EntityManagerFactory,但我们不确定EntityManager应该有多少个实例?我们应该创建六个实体管理器(每个线程一个)吗?我们应该如何创建 DAO?我们应该EntityManager像下面这样创建一个并为所有线程使用相同的 dao 类吗?我知道 EM 规范说它不是线程安全的,但是我在某处读到过在 spring 的情况下注入的 EM 是线程安全的(虽然我不相信这个解释)。
@Trasactional
public class myAppDao {
@PersistenceContext
private EntityManager entityManager;
..
}
Run Code Online (Sandbox Code Playgroud)
还是我们应该做些不同的事情?
Sta*_*sev 11
是的,通常EntityManagerorSession绑定到线程(作为 ThreadLocal 变量实现)。@PersistenceContext注解被 Spring IoC/CDI 识别并以特殊方式处理以启用此功能。
您的应用程序中有一些层(通常标记为@Transactional),用于创建 EntityManager 并将其绑定到 ThreadLocal 变量。每次@Transactional调用第一个时都会发生这种情况。同样 -EntityManager每次方法退出时都会关闭。
或者,这可以使用OpenSessionInViewInterceptor或来实现OpenSessionInViewFilter。
| 归档时间: |
|
| 查看次数: |
4593 次 |
| 最近记录: |