J'ai le fichier suivant qui agit comme point d'accès à ma DB de mes points d'extrémité d'API. Quelle est la bonne façon de maintenir une seule connexion (ou un pool de connexion?) Pour la durée de vie du serveur?
(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
)))
4 Réponses :
Le base de données_url code> est stocké, si vous utilisez avec connexion code> macro pour une connexion unique. Vous pouvez utiliser bibliothèque C3P0 pour le pool de connexion: (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}))
Je recommande également C3P0.
Connexion de clojure Piscuting
Fournit une introduction succincte sur la configuration de clojure.java.jdbc code> avec C3P0. P>
Je ne pense pas avec la connexion qui ne peut rien ouvrir. Doc ni source le suggère et, en 2.3, j'ai pu le confirmer en inspectant dB em> après avoir exécuté les requêtes. La source ressemble à ceci: (require '[clojure.java.jdbc :as j]
'[clojure.java.jdbc.sql :as s])
(def mysql-db {:subprotocol "mysql"
:subname "//127.0.0.1:3306/clojure_test"
:user "clojure_test"
:password "clojure_test"})
(j/insert! mysql-db :fruit
{:name "Apple" :appearance "rosy" :cost 24}
{:name "Orange" :appearance "round" :cost 49})
JDBC-Pool simplifie le processus d'utilisation de C3P0 avec clojure.java.jdbc. J'ai créé la bibliothèque spécifiquement (et seulement) à cette fin. P>