
一、介紹
1、連接配接池是建立和管理一個連接配接的緩沖池的技術,這些連接配接準備好被任何需要它們的線程使用
2、作用
連接配接對象建立和銷毀是需要耗費時間的,在伺服器初始化的時候就初始化一些連接配接。把這些連接配接放入到記憶體中,使用的時候可以從記憶體中擷取,使用完成之後将連接配接放入連接配接池中。從記憶體中擷取和歸還的效率要遠遠高于建立和銷毀的效率,提升性能。
二、常見的開源連接配接池
- druid
Druid阿裡旗下開源連接配接池産品
-
C3P0
C3P0是一個開放源代碼的JDBC連接配接池,Hibernate的發行包中預設使用此連接配接池。據說性能最好。
三、DBUtils
Commons DbUtils是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程式的開發,同時也不會影響程式的性能
四、druid的使用
1、添加maven
<dependency> <groupId>com.alibabagroupId> <artifactId>druidartifactId> <version>1.1.23version>dependency>
2、db.properties放在src目錄下
#key=valuedriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydb?rewriteBatchedStatements=true#url=jdbc:mysql://localhost:3306/mysqldbusername=rootpassword=rootinitialSize=10minIdle=5maxActive=20maxWait=5000
3、代碼
@Test /** * Druid的使用: * * 配置方式設定參數 * Druid配置方式可以使用屬性檔案配置的。 * * 檔案名稱沒有規定但是屬性檔案中的key要一定的。 */ public void druid(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ // 使用連接配接池: // 從屬性檔案中擷取: Properties properties = new Properties(); properties.load(new FileInputStream("src/druid.properties")); DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); // 獲得連接配接: conn = dataSource.getConnection(); // 編寫SQL: String sql = "select * from account"; // 預編譯SQL: pstmt = conn.prepareStatement(sql); // 設定參數: // 執行SQL: rs = pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money")); } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.release(rs, pstmt, conn); } }
五、c3P0
1、maven
<dependency> <groupId>c3p0groupId> <artifactId>c3p0artifactId> <version>0.9.1.2version>dependency>
2、c3p0-config.xml配置檔案,eclipse放在src目錄下,idea放在resource目錄下
<?xml version="1.0" encoding="UTF-8"?> ="driverClass">com.mysql.jdbc.Driver ="jdbcUrl">jdbc:mysql:///mydb ="user">root ="password">root ="initialPoolSize">5 ="minPoolSize">5 ="maxPoolSize">20
3、代碼
@Test/** * 采用配置檔案的方式: */public void c3p0(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ // 獲得連接配接:從連接配接池中擷取: // 建立連接配接池://建立連接配接池預設去類路徑下查找c3p0-config.xml ComboPooledDataSource dataSource = new ComboPooledDataSource(); // 從連接配接池中獲得連接配接: conn = dataSource.getConnection(); // 編寫SQL: String sql = "select * from account"; // 預編譯SQL: pstmt = conn.prepareStatement(sql); // 執行SQL: rs = pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money")); } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.release(rs, pstmt, conn); }}
六、c3p0連接配接池工具類
1、代碼
/** * JDBC的工具類 * @author jt * */public class JDBCUtils2 { // 建立一個連接配接池:但是這個連接配接池隻需要建立一次即可。 private static final ComboPooledDataSource dataSource = new ComboPooledDataSource(); /** * 獲得連接配接的方法 * @throws SQLException */ public static Connection getConnection() throws SQLException{ return dataSource.getConnection(); } /** * 獲得連接配接池: */ public static DataSource getDataSource(){ return dataSource; } /** * 釋放資源的方法 */ public static void release(Statement stmt,Connection conn){ if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } public static void release(ResultSet rs,Statement stmt,Connection conn){ // 資源釋放: if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } }}