我正在使用 Quarkus/PostgreSQL,它工作正常,没有错误(jdb 配置最小大小和最大大小默认)。当我向实体添加侦听器只是为了设置用户(使用注释 @PrePersist 和 @Preupdate)时,我注意到日志中出现以下错误:
stackTrace: "javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException:
Unable to acquire JDBC Connection
...
Caused by: java.sql.SQLException: Sorry, acquisition timeout!
at io.agroal.pool.ConnectionPool.handlerFromSharedCache(ConnectionPool.java:282)
这些错误出现很多,因为我相信,可能有事务打开但从未关闭(列表方法),导致由于没有可用连接而超时。但我的问题是为什么只有在我添加这个监听器之后才会发生这种情况。我不知道侦听器可能会导致此错误,因为我只在用户设置的 prepersist/preupdate 方法内执行(将 user 应用到 createby、updatedby 等两个字段)。顺便问一下,直接在实体上使用 @preupdate @prepersist 回调方法而不是创建侦听器有什么区别?我知道如果我创建一个 Listener 类,它可以用于不同的实体。但对于这种情况,如果我只使用实体内部的回调方法,是否会避免上述错误?
默认配置: quarkus.datasource.jdbc.max-size(默认 20)
有关应用程序的信息: quarkus-universe-bom 1.10.2.Final PostgreSQL 9.6 Java 8
问候, 博托伦
我解决了直接在实体内部添加预更新和预持久方法的问题,而不是使用侦听器。
最近遇到了这个问题,通过增加获取超时解决了它。