December 28, 2022
By: Kevin

避免在sqlite项目中使用连接池

使用luminus项目模版创建的项目中, 默认都是使用HikariCP来创建一个有10个connection的连接池.

这在其他类型的数据库上很合理, 在sqlite上却有些多余, 而且数据库有长时间闲置连接回收创建的机制, 在挂载多数据库的时候需要反复检查挂载.

如果漏掉就会抛出异常.

对原来代码进行修改:

(defstate ^:dynamic *db*
          :start (conman/connect! {:jdbc-url (env :database-url)})
          :stop (conman/disconnect! *db*))

改为

(defn db-con
  "通过db-url得到全局唯一的connection,因为我们的数据库是sqlite, 不需要连接池"
  [db-url]
  (let [[_ sqlite db-file] (split db-url #":")]
    (jdbc/get-connection
     {:dbtype   sqlite
      :dbname   db-file})))

(defstate ^:dynamic *db*
  :start    (db-con (env :database-url))
  :stop     (.close *db*))

这样全局有只有一个数据库连接了

Tags: clojure sqlite