【发布时间】:2013-02-13 16:09:52
【问题描述】:
如果没有在 Eclipse 链接的 persistence.xml 中定义连接池,那么默认行为是什么?
它会为每个事务打开和关闭一个 JDBC 连接吗?它会创建一个具有一些默认值的连接池吗?
【问题讨论】:
-
您在 persistence.xml 中指定了哪种事务类型?
标签: jpa jdbc eclipselink connection-pooling
如果没有在 Eclipse 链接的 persistence.xml 中定义连接池,那么默认行为是什么?
它会为每个事务打开和关闭一个 JDBC 连接吗?它会创建一个具有一些默认值的连接池吗?
【问题讨论】:
标签: jpa jdbc eclipselink connection-pooling
不使用数据源时 EclipseLink 的默认连接池是最小/最大 32 个连接的池,初始为 1 个连接。所以每个事务都将使用一个池连接,而不是连接/断开连接。
【讨论】:
如果您使用应用服务器(Java EE)和容器管理的持久性,那么您需要在应用服务器的管理控制台中设置连接池,并且不需要在持久性中设置池属性。 xml,例如:
<persistence-unit name="myPU" transaction-type="JTA">
<jta-data-source>jdbc_my_DataSource</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<properties/>
</persistence-unit>
如果你使用没有应用服务器(Java SE)的EclipseLink,使用应用管理的持久化,那么如果你不配置池,将使用Internal Connection Pooling,例如:
<persistence-unit name="DemoPU" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="javax.persistence.jdbc.user" value="myuser"/>
<property name="javax.persistence.jdbc.password" value="mypassword"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
</properties>
</persistence-unit>
【讨论】:
<property name="eclipselink.connection-pool.default.initial" value="1"/>
<property name="eclipselink.connection-pool.default.min" value="64"/>
<property name="eclipselink.connection-pool.default.max" value="64"/>
【讨论】:
只是想为上面 James 的回答提供代码源:您可以看到在 ServerSession 的构造函数中创建了一个默认连接池,使用 ConnectionPool 中定义的 init/min/max 默认值,并且可以选择由开发人员通过EntityManagerSetupImpl 中的属性覆盖/调整。
【讨论】: