zoukankan      html  css  js  c++  java
  • 【springboot】集成Druid 作为数据库连接池

    转自: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完成。

      

      

  • 相关阅读:
    网页请求过滤器Filter
    高级查询
    SQL编程
    数据库的实现
    数据库设计
    使用ADO.NET查询和操作数据
    使用ADO.NET访问数据库
    深入C#中的String类
    使用属性升级MyBank
    C#语法快速热身
  • 原文地址:https://www.cnblogs.com/wjqhuaxia/p/12113275.html
Copyright © 2011-2022 走看看