druid连接池初探

581 阅读2分钟

Druid简介

Druid是是阿里巴巴开源的数据库连接池项目。

当然Druid不仅仅是一个连接池,还有很多其他的功能。

Druid的使用

添加druid的依赖、数据库驱动

因为我们使用的是spring boot ,直接就添加 druid-spring-boot-starter 就可以了


<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.connector.version}</version>
</dependency>


<!-- Druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${druid.starter.version}</version>
</dependency>


在sources下yml里面添加Druid有关内容

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
        username: root
        # 1.配置生成的password
        password: 123456
        #   Druid数据源配置
        # 初始连接数
        initialSize: 5
        # 最小连接池数量
        minIdle: 10
        # 最大连接池数量
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        # 配置一个连接在池中最大生存的时间,单位是毫秒
        maxEvictableIdleTimeMillis: 900000
        # 配置检测连接是否有效
        validationQuery: SELECT 1 FROM DUAL
        #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
        testWhileIdle: true
        #配置从连接池获取连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
        testOnBorrow: false
        #配置向连接池归还连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
        testOnReturn: false
        #打开PsCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,log4j
        #合并多个DruidDatasource的监控数据
        useGlobalDataSourceStat: true
        #通过connectProperties属性来打开mergesql功能罗慢sQL记录
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;

使用的部分

@Repository
public class Xxx {
    @Resource
    private DruidDataSource dataSource;

    public void xxx() throws SQLException {
        //获取连接
        Connection connection = dataSource.getConnection();

        //Statement接口
        Statement statement = connection.createStatement();
        String sql1 = "insert into tb_student (name,age) values ('chy',20)";
        statement.executeUpdate(sql1);

        //PreparedStatement接口
        String sql2 = "insert into tb_student (name,age) values ('chy',22)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql2);
        preparedStatement.execute();

        //关闭连接
        connection.close();
    }

}

在config中导入

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.util.HashMap;
//声明这是一个配置类
@Configuration
public class DruidConfig {
    //将刚才配置的yml文件和配置类绑定
    @ConfigurationProperties(prefix = "spring.datasource")
    //注入到Bean中,交给spring进行管理
    @Bean
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }
    //后台监控功能
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        //后台需要有人登录,账号密码配置
        HashMap<String, String> initParameters = new HashMap<>();
        //加配置
        //注意:参数名字是固定的,为loginUsername 和loginPassword
        initParameters.put("loginUsername","admin");
        initParameters.put("loginPassword","123456");

        //允许谁能访问
        initParameters.put("allow","");//value参数为空,所有人能访问

        //禁止谁能访问
//        initParameters.put("my","");//value为ip地址,配置了为拒绝访问

        bean.setInitParameters(initParameters);//设置初始化参数

        return bean;
    }
}

这样就可以使用druid的监控功能