在Clojure中存储全局连接的正确方法是什么?

blo*_*ilk 5 clojure

我有以下文件作为我的API端点的数据库访问点.在服务器的生命周期内维护单个连接(或连接池?)的正确方法是什么?

(ns my-api.repository
  (:require [clojure.java.jdbc :as sql]))

(defn some-query
  (sql/with-connection (System/getenv "DATABASE_URL")
    (sql/with-query-results results
      ;; You get the picture
      )))
Run Code Online (Sandbox Code Playgroud)

num*_*_cn 5

DATABASE_URL存储,如果你使用with-connection宏单个连接。您可以使用c3p0库作为连接池:

(defn pooled-spec
  "return pooled conn spec.
   Usage:
     (def pooled-db (pooled-spec db-spec))
     (with-connection pooled-db ...)"
  [{:keys [classname subprotocol subname user password] :as other-spec}]
  (let [cpds (doto (ComboPooledDataSource.)
               (.setDriverClass classname)
               (.setJdbcUrl (str "jdbc:" subprotocol ":" subname))
               (.setUser user)
               (.setPassword password))]
    {:datasource cpds}))
Run Code Online (Sandbox Code Playgroud)