【springboot】集成Druid 作为数据库连接池

时间:2022-01-01 04:37:29

转自:https://blog.csdn.net/cp026la/article/details/86508139

1. 引言

  用户的每一次请求几乎都会访问数据库,访问数据库需要向数据库获取链接,而数据库创建连接是需要消耗资源的。数据库连接也是一种资源、使用数据库连接池等都是十分有必要的。本章小结一下Druid数据库连接池在SpringBoot1.5中的使用。

  Druid 学习地址: https://github.com/alibaba/druid/wiki/FAQ 非常详细

2. 数据库连接池

  C3P0、DBCP、Druid,这些是我常听的连接池,HikariCP 是近些年起来的连接池,是java性能方面最优的,springboot2.0 开始对它做了支持,而Druid 连接池内部使用的是公平锁,性能上有所下降,主要优点在监控这一块,事实上国内电商某宝对Druid性能作出了肯定,所以Druid性能也是毋庸置疑的。

3. 集成Druid连接池:

3.1 pom依赖(上一张章代码基础上):

maven依赖地址:https://mvnrepository.com/artifact/com.alibaba/druid

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
3.2 连接池配置: (application.properties)
#################### 数据库基本连接信息 #####################
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springbootdb?useSSL=false&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 
########################## druid数据源配置 start #############################
# 使用druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化的时候会创建一定数量的连接到连接池中
spring.datasource.initialSize=5
# 最小连接数 无论这些连接是否被使用都保留着这些数量的连接
spring.datasource.minIdle=5
# 连接池中最大的连接数,如果超过最大值,后面的连接将等待加入(使用公平锁排队进入)
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
# 连接测试  注意 MySQL orale 中有 dual表 sqlserver数据库没有
spring.datasource.validationQuery=SELECT 1 FROM DUAL
# 申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
spring.datasource.testWhileIdle=true
# 获取连接时执行检测,建议关闭,影响性能
spring.datasource.testOnBorrow=false
# 归还连接时执行检测,建议关闭,影响性能
spring.datasource.testOnReturn=false
# 是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
spring.datasource.poolPreparedStatements=true
# 定每个连接上PSCache的大小 开启poolPreparedStatements后生效
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 扩展插件 配置监控统计拦截的filters 常用的插件有=>stat:监控统计  log4j:日志  wall:防御sql注入
#spring.datasource.filters=stat,wall,log4j
spring.datasource.filters=stat,log4j
# 通过connectProperties属性来打开mergeSql(合并sql)功能;慢SQL记录  默认是 3秒
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
########################## druid数据源配置 end #############################
3.3 Druid配置类:
/**
 * @Auther: xf
 * @Date: 2018/11/26 22:10
 * @Description: druid 配置类
 * http://localhost:8080/druid/login.html
 */
@Configuration
public class DruidConfig {
    /**
     * druid本身就是为了扩展jdbc的功能,而dataSource对象就是jdbc的配置
     */
    @Bean
    // 引入application.properties文件中以spring.datasource开头的信息
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
    /**
     * Druid 监控视图配置
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        //  ip 白名单 没有配置则允许所有访问
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        // ip 黑名单 优先级大于白名单
        servletRegistrationBean.addInitParameter("deny","192.168.0.19");//设置ip黑名单,优先级高于白名单
        //设置控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername","admin");
        servletRegistrationBean.addInitParameter("loginPassword","admin");
        //是否可以重置数据
        servletRegistrationBean.addInitParameter("resetEnable","true");
        return servletRegistrationBean;
    }
    /**
     * 监控拦截器
     */
    @Bean
    public FilterRegistrationBean statFilter(){
        //创建过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //设置过滤器过滤路径
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略过滤的形式
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
3.4 Druid监控:(请求接口访问数据库)

访问:http://localhost:8080/druid/index.html 或 login.html:

【springboot】集成Druid 作为数据库连接池

 

 

看到相应的监控信息,可以根据这些指标进行相应的优化。

至此,springboot 配置Druid完成。