gpt4 book ai didi

java - spring如何知道使用哪个连接池?

转载 作者:行者123 更新时间:2023-11-30 03:25:07 26 4
gpt4 key购买 nike

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服务器和我的web应用程序在tomcat服务器启动后的一小段时间内运行良好。但是几个小时后,服务器报告一个sqlexception“连接已关闭”。

这是误用db连接池的问题吗? spring框架如何选择c3p0或DBCP?我如何指定连接池?还是tomcat使用默认的DBCP作为连接池?

最佳答案

你可以让你的tomcat服务器或其他应用程序服务器提供JNDI数据源。这样,您的服务器容器的独立连接池可以很好地处理您的数据库连接/ session 。在您的情况下,Tomcat 需要在 $TOMCAT_HOME/conf/context.xml 或 server.xml 中指定 JNDI 数据源:

<Resource name="jdbc/sample" auth="Container"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
username=...
password=...
url=...
driverClassName=...
/>

type 属性告诉 tomcat 使用哪个连接池。默认情况下,tomcat6 使用类型为“java.sql.DataSource”的 DBCP。确保在 persistence.xml 中使用 JNDI 引用:

<persistence version="2.1" ....>
<persistence-unit name="hibernate.recommendation_report.jpa">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<non-jta-data-source>java:comp/env/jdbc/sample</non-jta-data-source>
</persistence-unit>
</persistence>

或者使用spring xml配置数据源bean以注入(inject)到您的entityManagerFactory中。请refer to here .

<jee:jndi-lookup id="dataSource" jndi-name="java:sample"/>

查看其他 JNDI 资源 attributes available for DBCP 。注意:persistence.xml 数据源中的“java:comp/env/”前缀非常重要。没有它,Spring 将不会查找应用程序服务器提供的池来获取数据源,而只是使用该属性构造一个简单的数据源。数据源。注意:tomcat8本身提供了一个更好的池。如果你升级到tomcat8。

关于java - spring如何知道使用哪个连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441535/

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