2.1 druid官方github地址

https://github.com/alibaba/druid

整合第三方技术的两种方式

  • 自定义
  • 找starte

2.2 自定义方式

2.2.1 创建数据源

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid</artifactId>
  4. <version>1.1.17</version>
  5. </dependency>
  6. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  7. destroy-method="close">
  8. <property name="url" value="${jdbc.url}" />
  9. <property name="username" value="${jdbc.username}" />
  10. <property name="password" value="${jdbc.password}" />
  11. <property name="maxActive" value="20" />
  12. <property name="initialSize" value="1" />
  13. <property name="maxWait" value="60000" />
  14. <property name="minIdle" value="1" />
  15. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  16. <property name="minEvictableIdleTimeMillis" value="300000" />
  17. <property name="testWhileIdle" value="true" />
  18. <property name="testOnBorrow" value="false" />
  19. <property name="testOnReturn" value="false" />
  20. <property name="poolPreparedStatements" value="true" />
  21. <property name="maxOpenPreparedStatements" value="20" />
  1. @ConfigurationProperties("spring.datasource")
  2. @Bean
  3. public DataSource dataSource() throws SQLException {
  4. DruidDataSource druidDataSource = new DruidDataSource();
  5. // druidDataSource.setFilters("stat,wall");
  6. // druidDataSource.setUsername();
  7. // druidDataSource.setUrl();
  8. // druidDataSource.setPassword();
  9. return druidDataSource;
  10. }

2.2.2 StatViewServlet(监控页功能)

StatViewServlet的用途包括:

  • 提供监控信息展示的html页面
  • 提供监控信息的JSON API
      <servlet>
          <servlet-name>DruidStatView</servlet-name>
          <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>DruidStatView</servlet-name>
          <url-pattern>/druid/*</url-pattern>
      </servlet-mapping>
    
    @Bean
      public ServletRegistrationBean statViewServlet(){
          StatViewServlet statViewServlet = new StatViewServlet();
          ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
          //设置监控页的登录用户名和密码
          registrationBean.addInitParameter("loginUsername", "admin");
          registrationBean.addInitParameter("loginPassword", "admin");
          return registrationBean;
      }
    

    2.2.3 StatFilter

    用于统计监控信息;如SQL监控、URI监控 ```xml 需要给数据源中配置如下属性;可以允许多个filter,多个用,分割;如:

系统中所有filter:

| 别名 | Filter类名 |
| --- | --- |
| default | com.alibaba.druid.filter.stat.StatFilter |
| stat | com.alibaba.druid.filter.stat.StatFilter |
| mergeStat | com.alibaba.druid.filter.stat.MergeStatFilter |
| encoding | com.alibaba.druid.filter.encoding.EncodingConvertFilter |
| log4j | com.alibaba.druid.filter.logging.Log4jFilter |
| log4j2 | com.alibaba.druid.filter.logging.Log4j2Filter |
| slf4j | com.alibaba.druid.filter.logging.Slf4jLogFilter |
| commonlogging | com.alibaba.druid.filter.logging.CommonsLogFilter |

**慢SQL记录配置**
```xml
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    <property name="slowSqlMillis" value="10000" />
    <property name="logSlowSql" value="true" />
</bean>

使用 slowSqlMillis 定义慢SQL的时长

2.3 使用官方starter方式

2.3.1 引入druid-starter

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

2.3.2 分析自动配置

  • 扩展配置项 spring.datasource.druid
  • DruidSpringAopConfiguration.class, 监控SpringBean的;配置项:spring.datasource.druid.aop-patterns
  • DruidStatViewServletConfiguration.class, 监控页的配置:spring.datasource.druid.stat-view-servlet;默认开启
  • DruidWebStatFilterConfiguration.class, web监控配置;spring.datasource.druid.web-stat-filter;默认开启
  • DruidFilterConfiguration.class}) 所有Druid自己filter的配置
    private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
    private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
    private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
    private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
    private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
    private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
    private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
    private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";

2.3.3 配置示例

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

    druid:
      aop-patterns: com.atguigu.admin.*  #监控SpringBean
      filters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)

      stat-view-servlet:   # 配置监控页功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false

      web-stat-filter:  # 监控web
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'


      filter:
        stat:    # 对上面filters里面的stat的详细配置
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false    #禁止删除功能

SpringBoot配置示例
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

配置项列表https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8