Java 如何处理EntityManger通过Spring应用程序建立的连接池大小

Java 如何处理EntityManger通过Spring应用程序建立的连接池大小,java,spring,spring-mvc,jpa,Java,Spring,Spring Mvc,Jpa,我们有一个实现SpringMVC3.2的web应用程序,它使用JPA作为ORM的框架。现在的问题是EntityManager正在创建大量与数据库的开放连接。我们希望以这样一种方式处理它:对于每个查询,都应该建立一个连接,并在完成后关闭 根据spring实现,EntityManager只创建一次。但这里的问题是,我们希望以某种方式处理EntityManager为查询数据库而创建的客户端连接 每当数据库中的查询完成时,该连接就会进入睡眠状态,而我们希望在查询返回结果后关闭它 数据库类型:MySQL

我们有一个实现SpringMVC3.2的web应用程序,它使用JPA作为ORM的框架。现在的问题是EntityManager正在创建大量与数据库的开放连接。我们希望以这样一种方式处理它:对于每个查询,都应该建立一个连接,并在完成后关闭

根据spring实现,EntityManager只创建一次。但这里的问题是,我们希望以某种方式处理EntityManager为查询数据库而创建的客户端连接

每当数据库中的查询完成时,该连接就会进入睡眠状态,而我们希望在查询返回结果后关闭它

数据库类型:MySQL

我对JPA的配置是:

<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="com.reppify" />
    <property name="jpaPropertyMap" ref="jpaPropertyMap" />
    <property name="dataSource" ref="dataSourceLocal" />
    <property name="persistenceUnitName" value="cron-jpa" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
</bean>

<bean id="dataSourceLocal"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${database.driver}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.user}" />
    <property name="password" value="${database.password}" />
</bean>  
请为我们提供最佳解决方案。

DriverManager数据源不是连接池,它会在每次呼叫时创建新连接。这个类对于测试很有用,但您不应该在生产中使用它,而是选择一个连接池。有许多连接池可供选择:

...
EntityManager创建单个连接,如果您关闭EntityManager,则会将其关闭。这也取决于您的JPA实现,您没有提到您正在使用什么…您可以添加您的数据源定义吗?@SergiAlmar我也添加了数据源bean定义。EntityManager是否以某种方式关闭了?查看日志?Spring为您管理资源,这样您就不会引入内存泄漏,并且您可以正确地执行所有操作,我猜这是由于不使用连接池而导致的问题查看提供的选项。还发现了以下链接供进一步探索。
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
    this.entityManager = entityManager;
}