【问题标题】:When is a connection returned to the connection pool in a JPA application?何时将连接返回到 JPA 应用程序中的连接池?
【发布时间】:2012-11-22 07:57:21
【问题描述】:
如果我调用,连接是否仅返回到 JPA 应用程序中的连接池
entityManager.close();
?
支持 entitymanger 的连接能否在其生命周期内更改?
提前致谢
魔珠
【问题讨论】:
标签:
java
jpa
database-connection
connection-pooling
entitymanager
【解决方案1】:
这取决于 JPA 的实现和配置。
默认情况下,在 EclipseLink 中,连接仅在活动(脏)事务期间保持。即从第一次修改或锁定,直到提交或回滚。对于非事务性查询,按需获取连接并在查询执行后返回。这允许最大程度地使用连接池。所以,通常 em.close() 什么都不做。
您可以使用“eclipselink.jdbc.exclusive-connection.mode”持久性单元属性进行配置。 “始终”将在 EntityManager 的整个生命周期内保持连接。
您还可以将不同的连接池用于事务,而不是非事务性读取。这对 JTA 很有用,因为您可以使用非 JTA 数据源进行读取。
【解决方案2】:
JPA 规范没有定义这些东西,它由实现来管理连接。当事务处于活动状态时,您可以安全地假设连接在提交之前是相同的,原因很明显。一旦 txn 结束,它可能会被退回,或者可能会根据实施情况被保留(你没有提到你的)