1. 程式人生 > >【轉載】dbcp連線池的簡單使用

【轉載】dbcp連線池的簡單使用

 dbcp資料庫連線池的簡單使用---MySQL

有問題可以留言,如果你是初學者,下面的示例程式碼很不錯:)

 

package mysqlTest;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.omg.CORBA.Object;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * Description:使用dpcp連線池連線資料庫
 *
 * @author 0
 *         Created by 2018年12月11 
 */
public class DBCPUtil {

    /**
     * 資料來源
     */
    private static DataSource DS;

    private static String configFile = "/dbcp.properties";

    /**
     * @return
     * @Description: 從資料來源獲取一個連線
     */
    public Connection getConnection() {
        Connection connection = null;
        if (DS != null) {
            try {
                connection = DS.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                connection.setAutoCommit(false);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
        return connection;
    }

    /**
     * 預設的建構函式
     */
    public DBCPUtil() {
        DBCPUtil.initDbcp();
    }

    /**
     * @Description: 方式一,DBCP通過讀取配置檔案獲取引數後,通過BasicDataSourceFactory獲取DataSource
     */
    private static void initDbcp() {
        Properties properties = new Properties();
        try {
            properties.load(Object.class.getResourceAsStream(configFile));
            DS = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 建構函式,初始化了DS,指定資料庫
     */
    public DBCPUtil(String connectURI) {
        initDS(connectURI);
    }

    /**
     * 建構函式,初始化DS,制定所有引數
     */
    public DBCPUtil(String connectURI, String username, String password, String driverClass,
                    int initialSize, int maxActive, int maxIdle,
                    int maxWait, int minIdle) {
        initDS(connectURI, username, password, driverClass, initialSize, maxActive, maxIdle, maxWait, minIdle);

    }

    /**
     * @param connectURI 資料庫
     * @return
     * @Description 建立資料來源,除了資料庫外,都使用預設的引數
     */
    public static void initDS(String connectURI) {
        initDS(connectURI, "myoracle", "myoracle", "oracle.jdbc.driver.OracleDriver", 5, 30, 10, 1, 1000);
    }

    /**
     * @param connectURI
     * @param username
     * @param password
     * @param driverClass
     * @param initialSize
     * @param maxActive
     * @param maxIdle
     * @param maxWait
     * @param minIdle
     * @Description: 方式二,手動給建立DataSource,並給其設定引數
     */
    public static void initDS(String connectURI, String username, String password, String driverClass,
                              int initialSize, int maxActive, int maxIdle,
                              int minIdle, int maxWait) {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setUrl(connectURI);
        dataSource.setInitialSize(initialSize);
        dataSource.setMaxTotal(maxActive);
        dataSource.setMaxIdle(maxIdle);
        dataSource.setMaxWaitMillis(maxWait);
        dataSource.setMinIdle(minIdle);
        DS = dataSource;
    }


    public static void main(String[] args) {

        System.out.println(new DBCPUtil().getConnection());
    }

}

配置檔案:(放到src目錄下)

#dbcp.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=123456
maxActive=30
maxIdle=10
minIdle=1
maxWait=10000
initialSize=5
removeAbandoned=true
removeAbandonedTimeout=300