Clojure学习——给持久化框架配上c3p0连接池

之前的两个持久化框架都没有使用连接池。总感觉不放心。试着配置了个c3p0的连接池在clojureql框架中使用。同样的,放在clj-record框架中也没问题。

添加依赖
[clojureql "1.0.4"]
[mysql/mysql-connector-java "5.1.11"]
[c3p0/c3p0 "0.9.1.2"]


样例代码(由于之前的项目一直配的是DBCP连接池,C3P0的自己没配置过,看了下C3P0的文档,大概配置以下两种。第一种应该没问题。第二种我就不确定了)
(ns sample.c3p0
  (:import (com.mchange.v2.c3p0 ComboPooledDataSource
                                     DataSources
                                     PooledDataSource))
  (:use clojureql.core))

;;c3p0连接池
(def db_pool
  (let [config {:driver "com.mysql.jdbc.Driver"
                :subprotocol "mysql"
                :subname "//127.0.0.1:3306/test"
                :user "root"
                :password "123"}
        cpds (doto (ComboPooledDataSource.)
                   (.setDriverClass (:driver config))
                   (.setJdbcUrl (str "jdbc:" (:subprotocol config) ":" (:subname config)))
                   (.setUser (:user config))
                   (.setPassword (:password config)))]
    {:datasource cpds}))

(prn @(-> (table db_pool :users)
        (project [:name])
        (take 1)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;c3p0连接池,我不大确定这样写是不是正确的
(def db_pool!
  (let [url "jdbc:mysql://localhost/test"
        user "root"
        password "123"]
    {:datasource  (->> (DataSources/unpooledDataSource url  user password)
                    (DataSources/pooledDataSource))
     :auto-commit true
     :fetch-size 1000}))

(prn @(-> (table db_pool! :users)
        (project [:name])
        (take 1)))

你可能感兴趣的:(Clojure学习——给持久化框架配上c3p0连接池)