天天看點

JDBC資料庫連接配接池之dbcp

一、連接配接池的作用

資料庫的連接配接是一種很重要的資源,如果一個項目比較小,連接配接資料庫的次數比較少,我們可以采取直連的方式:“擷取連接配接----使用----關閉連接配接”。但是如果一個網站通路量很大,假如同時有幾百萬個使用者,這時候就會建立幾百萬個連接配接,這樣就很容易使資料庫崩潰,進而使網站癱瘓。這時候資料庫的連接配接池技術就可以起到作用了,維護連接配接池中的連接配接個數,如果來個請求連接配接,先看連接配接池中是否有空閑的連接配接,如果有就配置設定出去,用完就釋放,否則這個請求就必須等待。這就很好的解決了資料庫的壓力。這就像去餐廳一樣,人多的時候我們就得排号等待空閑的位置。

二、dbcp的使用

1.導入jar包。

dbcp依賴3個jar包。

commons-dbcp2-2.1.1.jar

commons-logging-1.1.1.jar

commons-pool2-2.4.2.jar

另外連接配接資料庫還需要單獨的jar包,我的資料庫是MySql,是以我用的是:mysql-connector-java-5.1.14.jar

2.配置參數

方式1.:通過配置檔案配置(dbcp.properties)

JDBC資料庫連接配接池之dbcp
JDBC資料庫連接配接池之dbcp
1 driverClassName=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost/paper_tag
3 username=root
4 password=admin
5 maxActive=30
6 maxIdle=10
7 maxWait=1000
8 initialSize=5      

View Code

方式2:通過代碼配置

BasicDataSource bds = new BasicDataSource();  
       bds.setUrl(url);  
       bds.setDriverClassName(driverClassName);  
       bds.setUsername(username);  
       bds.setPassword(password);  
       bds.setInitialSize(initialSize);  
       bds.setMaxActive(maxActive);  
       bds.setMinIdle(minIdle);  
       bds.setMaxIdle(maxIdle);  
       bds.setMaxWait(maxWait);  
      

  

3. 擷取連接配接

  • 下面是擷取連接配接的類DBCPUtil
    private static DataSource ds;
    
        private static final String configFile = "/dbcp.properties";
    
        public DBCPUtil() {
            initDBCP();
        }
    
        private void initDBCP() {
            Properties prop = new Properties();
            try {
                prop.load(Object.class.getResourceAsStream(configFile));
                ds = BasicDataSourceFactory.createDataSource(prop);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public Connection getConn() {
            Connection conn = null;
            if(ds != null) {
                try {
                    conn = ds.getConnection();
                    conn.setAutoCommit(false);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return conn;
        }
    
        public static void main(String[] args) {
            DBCPUtil db = new DBCPUtil();
            System.out.println(db.getConn());
        }
    }