luminus 的 db 操作工具不太好用,所以换成了 funcool 的 jdbc 和 c3p0。

增加依赖

1
2
3
[funcool/clojure.jdbc "0.9.0"]
[mysql/mysql-connector-java "5.1.6"]
[com.mchange/c3p0 "0.9.5"]

配置 dbpool

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

(def dbpool (doto (ComboPooledDataSource.)
(.setJdbcUrl (str "jdbc:"
(:subprotocol dbspec)
":"
(:subname dbspec)))

(.setUser (:dbuser dbspec nil))
(.setPassword (:dbpasswd dbspec nil))

(.setMinPoolSize 10)
(.setMaxPoolSize 200)

(.setMaxConnectionAge 3600) ; 1 hour
(.setMaxIdleTime 1800) ; 1/2 hour
(.setMaxIdleTimeExcessConnections 120)

(.setTestConnectionOnCheckin false)
(.setTestConnectionOnCheckout false)
(.setIdleConnectionTestPeriod 600)))

使用

1
2
3
4
5
(defn topic-fetch-all
[]
(with-open [conn (jdbc/connection dbpool)]
(let [result (jdbc/fetch conn "select @@version")]
(first result))))

END.