Я использую библиотеку [com.impossibl.pgjdbc-ng/pgjdbc-ng "0.7.1"]
для подключения к базе данных postgres.Связь сохраняется внутри атома.Затем я включаю несколько слушателей так:
(doto (.createStatement (connection f))
(.execute (format "LISTEN %s;" event))
(.closeOnCompletion)))
f
, в этом случае это функция, вызываемая при срабатывании события.По какой-то причине это не займет много времени, пока соединение не будет похоже на сборщик мусора, что, очевидно, приводит к тому, что слушатели не работают.arm-listeners
method.
Я пробовал несколько вещей, например, сохранял соединение в 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")