【发布时间】:2019-01-29 09:41:29
【问题描述】:
我正在使用[com.impossibl.pgjdbc-ng/pgjdbc-ng "0.7.1"] 库连接到 postgres 数据库。
连接保存在原子内。
然后我像这样武装多个听众:
(doto (.createStatement (connection f))
(.execute (format "LISTEN %s;" event))
(.closeOnCompletion)))
f 在这种情况下是事件触发时调用的函数。
由于某种原因,连接似乎很快就会被垃圾回收,这显然会使侦听器无法正常工作。
WARNING: Cleaning up leaked connection ( jdbc:pgsql://my-container/database )
此警告之后是我在 arm-listeners 方法中打开连接的堆栈跟踪。
我尝试了几件事,例如将连接存储在 let 中,但似乎没有一个有助于解决这个特定问题。
我使用的建立连接和启动监听器的完整函数是:https://github.com/n2o/postgres-listener/blob/master/src/postgres_listener/core.clj
这就是我启动监听器的方式:
(defn start-listeners
"Start all important listeners."
[]
(connect {:host (System/getenv "DB_HOST")
:port (read-string (System/getenv "DB_PORT"))
:database (System/getenv "DB_NAME")
:user (System/getenv "DB_USER")
:password (System/getenv "DB_PW")})
(arm-listener handle-textversions "textversions_changes")
(arm-listener handle-statements "statements_changes")
(arm-listener handle-arguments "arguments_changes")
【问题讨论】:
-
您能否更完整地重现该问题?
-
我添加了额外的代码和信息。
标签: jdbc clojure connection-leaks