我有以下文件作为从我的 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
      )))

最佳答案

如果您使用 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}))

关于clojure - 在 Clojure 中存储全局连接的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11571433/

10-11 19:39