我在非web應用程序中使用spring,並且使用hibernate處理數據庫。我遇到的問題是,雖然「registerShutdownHook();」並沒有關閉spring context container,它沒有正確關閉並關閉JPA的資源,所以我與DB的連接正在變得越來越多。Spring獨立應用程序中的JPA /休眠
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="pu" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
我用上面介紹的配置火起來JPA圖層,使用「@Transactional」註釋注入EM是爲DAO的。
也許有人可以幫我解決我錯過了什麼,或者我應該如何處理在獨立環境中正確關閉JPA會話?
謝謝,
P.S.例外,我得到的是:java.net.SocketException異常:沒有可用的緩衝空間(最大連接數達到?):連接
我認爲@Transactional不適用於注射EMs,是嗎? –
PersistenceAnnotationBeanPostProcessor - 根據我的理解,掃描@Transactional註釋以注入EM。 – Xeperis
我相信它會掃描「@ PersistenceUnit」和「@ PersistenceContext」,而不是 –