0

我们使用 RapidclipseX 创建了一个应用程序,并使用 PostgreSQL 作为数据库。下面是我对 peristance.xml 的初始设置。

property name="hibernate.hbm2ddl.auto" value="none" />
        <property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE" />
        <property name="hibernate.c3p0.max_size" value="50000" />
        <property name="hibernate.c3p0.idle_test_period" value="300" />
        <property name="hibernate.c3p0.max_statements" value="100" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect" />
        <property name="hibernate.cache.use_query_cache" value="true" />
        <property name="hibernate.c3p0.min_size" value="1" />
        <property name="hibernate.default_schema" value="canavans" />
        <property name="rap.queryCache.mode" value="ENABLE_SELECTIVE" />
        <property name="hibernate.archive.autodetection" value="" />
        <property name="hibernate.cache.use_second_level_cache" value="true" />
        <property name="hibernate.c3p0.timeout" value="3000" />
        <property name="hibernate.transaction.auto_close_session" value="false" />
        <property name="hibernate.javax.cache.uri" value="classpath:ehcache.xml" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jcache.JCacheRegionFactory" />
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
        <property name="hibernate.generate_statistics" value="false" />
        <property name="hibernate.auto_quote_keyword" value="true" />
        <property name="hibernate.globally_quoted_identifiers" value="true" />

当我们开始生产时,我们开始收到一个错误:“获取测试 - 池已被最大化。”

然后我添加了这两行:

<property name="hibernate.c3p0.unreturnedConnectionTimeout" value="120" />
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces" value="true" />

一段时间以来,它解决了我们的问题。但是现在,在我们导入旧数据库之后,我们开始得到一个新的错误:

2020-11-25 16:44:11 DEBUG DefaultConnectionTester:207 - Testing a Connection in response to an Exception:
org.postgresql.util.PSQLException: This connection has been closed.
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:299)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269)
2020-11-25 16:44:11 DEBUG NewPooledConnection:207 - com.mchange.v2.c3p0.impl.NewPooledConnection@614f3f61 invalidated by Exception.

当我用谷歌搜索这个问题时,我发现:Maxed out the question that I've implemented(这两行)的解决方案可能是新异常的问题。

我还发现了连接泄漏问题。我试图在 DAO 中关闭 entityManager,但是当我添加任何 JPA-SQL 查询并加载 Java 文件时,这些行就会消失。

请帮助我如何一劳永逸地解决这个问题。有没有有效的方法来做到这一点?我们必须一次又一次地重新启动我们的生产应用程序。

我非常感谢您能提供的任何帮助。

4

1 回答 1

0

问题在于 Rapidclipse X 初始框架版本。框架 10+ 中 Rapidclipse X.0.4 的最新框架解决了这个问题

XWS-1881 - 刷新具有多个 StreamResources 的页面导致池大小稳步增加。我们通过将 EntityManager 的延迟初始化添加到每个请求会话策略来解决此问题。这意味着 EntityManager 仅按需创建,而不是在对服务器应用程序的每个请求上创建。这应该会提高框架的整体性能

Rapidclipse 补丁说明 10.4.0 版

于 2021-05-15T14:10:07.240 回答