講解
1.Druid是阿里巴巴開發的號稱爲監控而生的數據庫連接池,Druid是目前最好的數據庫連接池。在功能、性能、擴展性方面,都超過其他數據庫連接池,同時加入了日誌監控,可以很好的監控DB池連接和SQL的執行情況。Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。
Druid地址:https://github.com/alibaba/druid
DRUID連接池使用的jar包:druid-1.0.9.jar
2.Druid常用的配置參數解釋:
jdbcUrl 連接數據庫的url
username 數據庫的用戶名
password 數據庫的密碼
driverClassName 驅動類名。根據url自動識別,這一項可配可不配,如果不配置druid會根據url自動識別
initialSize 剛創建好連接池的時候連接數量
maxActive 連接池中最多可以放多少個連接
maxWait 獲取連接時最大等待時間,單位毫秒
3.Druid(德魯伊)的使用步驟:
1.下載jar,導包
druid-1.0.9.jar
2.複製配置文件到工程中 druid.properties
url=jdbc:mysql://localhost:3306/test
username=root
password=root
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10
maxWait=2000
3.通過德魯伊的工具類的靜態方法獲取數據源
DataSource DruidDataSourceFactory.createDataSource(Properties p)
/*未優化前的創建連接池的代碼實現:*/
public class DruitDemo {
public static void main(String[] args) throws Exception {
//3.通過德魯伊的工具類的靜態方法獲取數據源
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
//接口的多態
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
for (int i = 0; i < 11; i++) {
Connection connection = dataSource.getConnection();
System.out.println(i + "--" + connection);
if(i == 5){
connection.close();
}
}
}
}
4.druid工具類的使用:
1.druid獲取步驟,封裝在工具類中,重複
2.數據源不用創建多個,只需要創建一個,將數據源定義成私有的靜態變量
3.druid數據源的賦值和配置文件的讀取只需要執行一次,所以代碼封裝到靜態代碼塊中
/*通過把連接池封裝在一個工具類中進行調用,優化*/
public class druidUtil {
private static DataSource dataSource;
static {
try {
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
//接口的多態
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//向外提供一個數據源
public static DataSource getDataSource(){
return dataSource;
}
//獲取連接
public static Connection getConnection(){
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//資源釋放
public static void release(ResultSet resultSet, Statement statement, Connection connection) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
resultSet = null;//避免內存泄漏
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
statement = null;//避免內存泄漏
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
connection = null;//避免內存泄漏
}
}
}