Druid是阿里巴巴推出的國產數據庫連接池,據網上測試對比,比目前的DBCP或C3P0數據庫連接池性能更好。它不僅僅是一個數據庫連接池,它還包含一個ProxyDriver,一系列內置的JDBC組件庫,一個SQL Parser。 支持所有JDBC兼容的數據庫,包括Oracle、MySQL、Derby、Postgresql、SQL Server、H2等等。 Druid針對oracle和mysql做了特別優化,比如Oracle的PS Cache內存占用優化,MySql的ping檢測優化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,這是一個手寫的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象語法樹很方便。簡單SQL語句用時10微秒以內,復雜SQL用時30微秒。
Druid與其他數據庫連接池使用方法基本一樣(與DBCP非常相似),將數據庫的連接信息全部配置給DataSource對象。
1.配置文件db.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://172.19.57.246:3306/webservice?useUnicode=true&characterEncoding=utf-8 username=root password=root filters=stat initialSize=3 maxActive=300 maxWait=60000 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false poolPreparedStatements=false maxPoolPreparedStatementPerConnectionSize=200
2.JdbcUtils工具類
package founder.util; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import com.alibaba.druid.pool.DruidPooledConnection; /** * @ClassName: JdbcUtils * @author hanwl * @date 2019年01月22日 * @Description: TODO */ public class JdbcUtils { // 工具類,私有化無參構造函數 private JdbcUtils() { } private static JdbcUtils databasePool=null; private static DruidDataSource dataSource = null; // 靜態代碼塊,加載配置文件。 static{ try{ InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(in); dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(prop); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static synchronized JdbcUtils getInstance() { if(null == databasePool){ databasePool=new JdbcUtils(); } return databasePool; } /** * 創建數據庫連接實例 * @return 數據庫連接實例 connection */ public DruidPooledConnection getConnection(){ try { return dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } throw new RuntimeException("獲取數據庫連接異常"); } /** * 關閉數據庫連接實例 */ public static void releaseSqlConnection(ResultSet rSet, PreparedStatement pStatement,PreparedStatement iStatement, Connection connection) { try { if (rSet != null) { rSet.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (pStatement != null) { pStatement.close(); } if(iStatement!=null){ iStatement.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } }