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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM