如何在Clojure应用程序中使用ElephantSQL(Postgresql)?

时间:2014-07-30 02:59:03

标签: postgresql clojure cloudbees

我将ElephantSQL插件添加到我的cloudbees(?)托管服务并命名为​​DB。

我已经看过有关MySQL服务的文档,以及如何集成它,但对于ElephantSQL却没有。

我是否需要环境配置设置,连接字符串或什么?

在Heroku上,我使用DATABASE_URL配置变量作为我的连接字符串。

1 个答案:

答案 0 :(得分:0)

我们建议使用BoneCP和clojure.java.jdbc

(ns myapp.db
  (:import com.jolbox.bonecp.BoneCPDataSource)
  (:import java.net.URI)
  (:require [clojure.java.jdbc :as jdbc]
            [clojure.string :as string]))

(def url (get (System/getenv) "ELEPHANTSQL_URL" "postgres://localhost/mydb"))

(defn pool [url]
  (let [uri (URI. url)
        host (.getHost uri)
        port (if (pos? (.getPort uri)) (.getPort uri) 5432)
        path (.getPath uri)
        user-info (or (.getUserInfo uri) ":")
        [user password] (string/split user-info #":")]
    {:datasource
     (doto (BoneCPDataSource.)
       (.setJdbcUrl (str "jdbc:postgresql://" host ":" port path))
       (.setPartitionCount 1)
       (.setMinConnectionsPerPartition 3)
       (.setMaxConnectionsPerPartition 10)
       (.setUsername user)
       (.setPassword password))}))

(def pooled-db (delay (pool url)))

(defn account [id]
  (jdbc/query
    @pooled-db
    ["SELECT * FROM accounts WHERE id = ?" id]))