我们有一个使用Spring MVC 3.2
作为ORM框架实现JPA
的Web应用程序。现在的问题是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>
我们使用hibernate-jpa-api-2.0
jar作为项目的依赖项
我注入EntityManager
的JAVA Base DAO实现如下:
protected EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
请为我们提供最佳解决方案。
答案 0 :(得分:4)
DriverManagerDataSource
不是连接池,它会在每次调用时创建一个新连接。此类对于测试很有用,但您不应在生产中使用它,而是选择连接池。有许多连接池可供选择: