1. 程式人生 > 實用技巧 >Druid連線池入門使用和工具類封裝

Druid連線池入門使用和工具類封裝

Druid(德魯伊):阿里巴巴提供的資料庫連線池技術,是目前最好的資料庫連線池。
600+專案中使用,支援sql日誌監控

Java為資料庫連線池提供了公共的介面: DataSource,各個連線池廠商去實現這套介面,提供jar包。

DataSource
    功能
       * 獲取連線:
           Connection getConnection()  
       * 歸還連線:
           connction.close()
            連線池廠商對connection物件的close()方法進行(增強),執行該方法時不是銷燬物件,而是歸還到連線池中
                使用的動態代理技術進行增強的....

Druid連線池快速入門

// 1.建立druid資料來源(連線池)物件
DruidDataSource dataSource = new DruidDataSource();
// 2.配置資料庫基本四項,建立連線,初始化連線池容器
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/web");
dataSource.setUsername("root");
dataSource.setPassword("root");

// 指定初始化個數
dataSource.setInitialSize(5);
// 指定最大個數 dataSource.setMaxActive(100); // 指定低峰期個數 dataSource.setMinIdle(20); // 指定等待時間 dataSource.setMaxWait(3000); // 3.從連線池中獲得連線物件 Connection connection = dataSource.getConnection(); System.out.println(connection); // 4.歸還到連線池 connection.close(); // 此物件是druid提供的子類,實現了對close方法的增強,不再是銷燬物件,而是歸還到連線池

Druid連線池配置檔案讀取

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/databasename
username=root
password=root
#初始化個數
initialSize=5
#最大連線數
maxActive=10
#等待時間,毫秒
maxWait=3000
#最少連線數
minIdle=3
// 通過類載入器,載入 druid.properties檔案,獲取io流
InputStream in = DruidDemo2.class.getClassLoader().getResourceAsStream("druid.properties");
Properties properties = new Properties();
properties.load(in);

// 通過druid工廠,建立druid連線池物件
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

// 從連線池獲取連線
for (int i = 1; i <= 11; i++) {
   Connection connection = dataSource.getConnection();
   // 進行jdbc的 crud操作
   System.out.println(connection);
   // 模擬歸還
   if(i== 10){
      connection.close();
   }
   // 連線池使用詳情
   System.out.println(dataSource);
}

連線池工具類

/*
    mybatis內建連線初始化程式碼....
 */
public class JdbcUtils {

    // 宣告連線池物件
    private static DataSource dataSource;

    // 1. 初始化連線池容器  static{}
    static {
        try {
            // 1.載入druid.properties 配置檔案
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            Properties properties = new Properties();
            properties.load(in);

            // 2.通過druid的工廠,建立連線池物件
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            throw new RuntimeException("druid連線池初始化失敗...");

        }
    }

    // 2. 提供獲取連線池物件的靜態方法
    public static DataSource getDataSource() {
        return dataSource;
    }

    // 3. 提供獲取連線物件的靜態方法
    public static Connection getConnection() throws Exception {
        return dataSource.getConnection();
    }

    // 4. 提供釋放資源的方法(conn物件不是銷燬,而是歸還到連線池)
    public static void release(ResultSet resultSet, Statement statement, Connection connection) {
        // 關閉ResultSet
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        // 關閉Statement
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        // 關閉Connection
        if (connection != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    // 方法過載
    public static void release(Statement statement, Connection connection) {
        release(null, statement, connection);
    }
}