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*))
这样全局有只有一个数据库连接了