1. 程式人生 > >資料庫連線池的學習(四)——Druid連線池

資料庫連線池的學習(四)——Druid連線池

Druid 是目前比較流行的高效能的,分散式列儲存的OLAP框架(具體來說是MOLAP)。它有如下幾個特點:

① 亞秒級查詢

druid提供了快速的聚合能力以及亞秒級的OLAP查詢能力,多租戶的設計,是面向使用者分析應用的理想方式。

②實時資料注入

druid支援流資料的注入,並提供了資料的事件驅動,保證在實時和離線環境下事件的實效性和統一性

③可擴充套件的PB級儲存

druid叢集可以很方便的擴容到PB的資料量,每秒百萬級別的資料注入。即便在加大資料規模的情況下,也能保證時其效性

④多環境部署

druid既可以執行在商業的硬體上,也可以執行在雲上。它可以從多種資料系統中注入資料,包括hadoop,spark,kafka,storm和samza等

⑤豐富的社群

druid擁有豐富的社群,供大家學習

需要的包:druid-1.1.10.jar

首先寫一個配置檔案:db.propreties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=1234
maxActive=10

接著建立一個druid工具類:DruidUtils

import com.alibaba.druid.pool.DruidDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DruidUtils {
    private static DruidDataSource dds;

    static {
        dds = new DruidDataSource();
        Properties p = new Properties();


        try {
            InputStream is = DruidDataSource.class.getResourceAsStream("/db.properties");
            p.load(is);
            // 設定驅動類全稱
            dds.setDriverClassName(p.getProperty("driverClassName"));
            // 設定連線的資料庫
            dds.setUrl(p.getProperty("url"));
            // 設定使用者名稱
            dds.setUsername(p.getProperty("username"));
            // 設定密碼
            dds.setPassword(p.getProperty("password"));
            // 設定最大連線數量
            dds.setMaxActive(Integer.parseInt(p.getProperty("maxActive")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() {
        try {
            return dds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // 關閉資源
    public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(PreparedStatement st) {

        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet set) {
        if (set != null) {
            try {
                set.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(Connection conn, PreparedStatement st, ResultSet rt) {
        close(conn);
        close(st);
        close(rt);
    }
}

接著進行資料庫的測試:

import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DruidTest {
    @Test
    public void t() throws SQLException {
        Connection conn = DruidUtils.getConnection();

        PreparedStatement ps = conn.prepareStatement("select * from students");
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            String sname = rs.getString("sname");
            System.out.println(sname);
        }

        DruidUtils.close(conn, ps, rs);
    }
}