Druid(德魯伊):阿里巴巴提供的數據庫連接池技術,是目前最好的數據庫連接池。
600+項目中使用,支持sql日志監控
DataSource 功能 * 獲取連接: Connection getConnection() * 歸還連接: connction.close() 連接池廠商對connection對象的close()方法進行(增強),執行該方法時不是銷毀對象,而是歸還到連接池中 使用的動態代理技術進行增強的....
// 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方法的增強,不再是銷毀對象,而是歸還到連接池
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); } }