Druid

Druid数据库连接池不仅性能高效,还提供完整的监控。

不管是Druid还是C3P0,本质上都是对DataSource接口的一种实现。

数据库连接池

Druid除了基础的数据库连接池功能外,还针对SQL、Spring、Web应用、Session等提供了良好的服务监控,同时还提供了SQL防火墙功能。

连接池监控

数据库连接池

Maven配置依赖

$ vim pom.xml

    com.alibaba
    druid
    1.2.8


    mysql
    mysql-connector-java
    8.0.28

添加数据库连接池配置文件,配置文件名称可自定义,存放位置推荐在resources文件夹下。

$ vim resources/druid.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/fw
username=root
password=root
initialSize=10
maxActive=20
maxWait=10000

定义数据库连接池工具类

$ vim util/DruidUtil.java
package com.jc.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DruidUtil {
    private static DataSource ds = null;
    static {
        //导入配置文件
        Properties p = new Properties();
        InputStream is = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            p.load(is);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        //获取数据源
        try {
            ds = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    //获取数据源
    private static DataSource getDataSource(){
        return ds;
    }
    //获取连接
    public static Connection getConnection(){
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    //释放连接返还连接池
    public static void release(Connection conn, Statement stmt, ResultSet rs){
        if(rs != null){
            try{
                rs.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(stmt != null){
            try{
                stmt.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if(conn != null){
            try{
                conn.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    public static void release(Connection conn, Statement stmt){
        release(conn, stmt, null);
    }
    public static void release(Connection conn){
        release(conn, null, null);
    }
}

你可能感兴趣的:(Druid)