2014-11-27 6 views
-1

У нас есть веб-приложение, реализующее 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; 
} 

Пожалуйста, предложите нам оптимальное решение для этого же.

+1

EntityManager создает одно соединение, и закрыть его, если закрыть EntityManager. Все зависит от вашей реализации JPA также, и вы не упоминаете, что используете ... –

+0

Не могли бы вы добавить определение своего источника данных? –

+0

@SergiAlmar Я также добавил определение компонента источника данных. –

ответ

3

DriverManagerDataSource не является пулом соединений, он создает новое соединение для каждого вызова. Этот класс полезен для тестирования, но вы не должны использовать его в процессе производства, вместо этого выберите пул соединений. Есть много пулов соединений на выбор:

+0

Посмотрите на предоставленные опции. Также была найдена следующая ссылка для дальнейшего исследования. http://docs.spring.io/spring/docs/2.5.6/api/org/springframework/jdbc/datasource/DriverManagerDataSource.html –

Смежные вопросы