Shi*_*ava -1 java spring jpa spring-mvc
我们有一个Web应用程序中实现Spring MVC 3.2使用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>
Run Code Online (Sandbox Code Playgroud)
我们使用hibernate-jpa-api-2.0jar 作为项目的依赖项。
我用于注入的 JAVA Base DAO 实现EntityManager如下所示:
受保护的 EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
Run Code Online (Sandbox Code Playgroud)
请向我们建议相同的最佳解决方案。
DriverManagerDataSource不是连接池,它在每次调用时创建一个新连接。这个类对于测试很有用,但你不应该在生产中使用它,而是选择一个连接池。有很多连接池可供选择:
| 归档时间: |
|
| 查看次数: |
3232 次 |
| 最近记录: |