我在非 Web 应用程序中使用 spring,我正在使用 hibernate 来处理 DB。我遇到的问题是“registerShutdownHook();” 确实关闭了 spring 上下文容器,它没有正确关闭和关闭 JPA 的资源,因此我与 DB 的连接被最大化。
<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 会话?
谢谢,
PS我得到的异常是:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):连接