美文网首页
7、SpringBoot -连接池(Durid)

7、SpringBoot -连接池(Durid)

作者: 唯老 | 来源:发表于2019-09-15 16:15 被阅读0次

    一导入相关核心包

    <dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.20</version>
    </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
    

    二 在application.yml

    spring:
      datasource:
        #===========JDBC 配置===========
        url: jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
        # 初始化线程池数量  最大数  最小数
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        # 驱动包 8.0以上的配置
        # =========== durid 连接池配置===========
        druid:
          initial-size: 5
          max-active: 20
          min-idle: 3
          # 配置获取连接等待超时的时间 单位毫秒
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 300000
          validation-query: select
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          pool-prepared-statements: true
          #      配置监控统计拦截器 日志配置  防火墙
          #      stat监控数据库性能
          #      wall  用于防火墙
          #      日志 slf4j logback
          #      log4j
          #      log4j2
          # 配置多个英文逗号分隔
          filters: stat,wall,slf4j
          max-pool-prepared-statement-per-connection-size: 20
          # 合并多个DruidDataSource的监控数据
          use-global-data-source-stat: true
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
          # ===========监控配置===========
          # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
          web-stat-filter:
            #是否启用StatFilter默认值false
            enabled: true
            # 拦截所有的
            url-pattern: /*
            # 排除一些不必要的url,比如*:js,/jslib/*等等:
            exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico, /druid/*"
            # 关闭和开启session 统计功能 默认关闭
            #        session-stat-enable: true
            # sessionStatMaxCount是1000个
            #        session-stat-max-count: 1000
            # 配置principalSessionName,使得druid能够知道当前的session的用户是谁
            #        principal-session-name:
            # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
          stat-view-servlet:
            # 是否启用StatViewServlet默认值true
            enabled: true
            url-pattern: /druid/*
            # 界面上有一个重置功能 执行这个操作之后,会导致所有计数器清零,重新计数 建议false
            reset-enable: false
            # 登录的后台的用户名,密码
            login-username: admin
            login-password: admin
            # 访问控制,可以配置allow和deny这两个参数
            # 配置格式 ip或者ip/子网掩码(24) 例如   192.168.2.112 ,192.168.2.112/24
            # 注意 由于匹配规则不支持IPV6,配置了allow或者deny之后,会导致IPV6无法访问。
            # allow:
            # deny:
    

    三、配置Druid Datasource

    @Configuration
    public class DruidConfiguration {
        @Bean(destroyMethod = "close", initMethod = "init")
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource druidDataSource() {
            DruidDataSource druidDataSource = new DruidDataSource();
            return druidDataSource;
        }
        /**
         * 可以在配置文件中配置 如果在配置文件中配置了,请注释掉该代码
         * 注册一个StatViewServlet
         *
         * @return
         */
        @Bean
        public ServletRegistrationBean druidStatViewServlet() {
            //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
            //添加初始化参数:initParams
            //白名单:
            servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
            // IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:
            servletRegistrationBean.addInitParameter("deny", "");
            //登录查看信息的账号密码.
            servletRegistrationBean.addInitParameter("loginUsername", "admin");
            servletRegistrationBean.addInitParameter("loginPassword", "admin");
            //是否能够重置数据.
            servletRegistrationBean.addInitParameter("resetEnable", "false");
            return servletRegistrationBean;
        }
        /**
         * 注册一个:filterRegistrationBean
         *
         * @return
         */
        @Bean
        public FilterRegistrationBean druidStatFilter() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
            //添加过滤规则.
            filterRegistrationBean.addUrlPatterns("/*");
            //添加不需要忽略的格式信息.
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }
    

    五、监控

    访问 http://localhost:8080/druid, 使用上面配置的账号密码。

    image

    四、自动配置原理

    源代码

    @Configuration
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
    @EnableConfigurationProperties(DataSourceProperties.class)
    @Import({ DataSourcePoolMetadataProvidersConfiguration.class,
            DataSourceInitializationConfiguration.class })
    public class DataSourceAutoConfiguration {
      // ...
    }
    

    说明

    • DataSourceProperties 配置相关
    • 首先找到@Import({ DataSourcePoolMetadataProvidersConfiguration.class,DataSourceInitializationConfiguration.class })
    • 然后点击进入
      DataSourcePoolMetadataProvidersConfiguration
    • 根据加载条件注解在三种数据库连接池自动装配
      @ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
      @ConditionalOnClass(HikariDataSource.class)
      @ConditionalOnClass(BasicDataSource.class)

    相关文章

      网友评论

          本文标题:7、SpringBoot -连接池(Durid)

          本文链接:https://www.haomeiwen.com/subject/coftuctx.html