com.alibaba.druid數據源工具類


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

}

 

 
 


免責聲明!

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



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