【发布时间】:2015-05-25 15:26:23
【问题描述】:
spring如何知道使用哪个连接池?
众所周知,您告诉 spring 框架一个持久化单元名称,并使用 @PersistenceContext 注释实体管理器,并配置 Persistence.xml。Spring 为您做所有事情。
我对 entityManager 字段上方的spring注解“@PersitenceContext”感到很困惑。 我的 persistence.xml 如下:
<persistence-unit name="hibernate.recommendation_report.jpa">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@192.168.113.226:11521:BOSS" />
<property name="javax.persistence.jdbc.user" value="xxxx" />
<property name="javax.persistence.jdbc.password" value="xxxx" />
</properties>
</persistence-unit>
我的 tomcat 服务器和我的 webapp 在启动 tomcat 服务器后的一小段时间内运行良好。但是几个小时后,服务器报告了一个 sqlexception“连接已经关闭”。
这是误用db连接池的问题吗? spring 框架如何选择 c3p0 或 DBCP ?我将如何指定连接池?还是tomcat使用默认的DBCP作为连接池?
【问题讨论】:
-
春天和这有什么关系?您提供了一个不使用任何连接池的持久性单元,除了 JPA 提供者使用的内容。您的 JPA 提供程序是创建池的原因
-
不要为我查找persistence.xml并初始化数据源?我认为JPA提供者只是管理实体。如果我可以在persistence.xml中放置一些标签/配置到指定框架使用的连接池。
-
没有。 JPA 提供者查找数据源,因为需要该数据源来持久化/查询实体。