我正在使用该[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
方法中打开连接的堆栈跟踪。
我尝试了几件事,例如将连接存储在 a 中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")