У нас есть веб-приложение, реализующее Spring MVC 3.2
с использованием JPA
в качестве рамки для ORM. Теперь проблема в том, что EntityManager
создает много открытых соединений с базой данных. Мы хотим обработать его таким образом, чтобы при каждом запросе соединение было установлено и закрыто после завершения.Как обрабатывать Размер пула соединений, созданный EntityManger через приложение Spring
Согласно реализации Spring EntityManager создается один раз. Но проблема здесь в том, что мы каким-то образом хотим обрабатывать клиентские соединения, созданные EntityManager для запросов к базе данных.
Всякий раз, когда запрос завершается в базе данных, это соединение переходит в спящий режим, вместо этого мы хотим закрыть его, как только запрос вернет результат.
типа DB: 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
банку в качестве зависимости от проекта.
И моя реализация JAVA Base DAO для инъекций EntityManager
выглядит так:
защищенный EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
Пожалуйста, предложите нам оптимальное решение для этого же.
EntityManager создает одно соединение, и закрыть его, если закрыть EntityManager. Все зависит от вашей реализации JPA также, и вы не упоминаете, что используете ... –
Не могли бы вы добавить определение своего источника данных? –
@SergiAlmar Я также добавил определение компонента источника данных. –