我在非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”,而不是 –