SpringBoot从入门到精通—整合Druid数据源

java实现的数据库连接池有很多,比如c3p0,dbcp等,还有号称速度最快的HikariCP,并且springboot2.0.2版本默认使用的就是HikariCP。 为什么选用Druid呢? - 性能够好,比c3p0,dbcp强一些 - 经过考验,毕竟是阿里开源出来的项目 - 最关键的是带一个强大的数据库监控

这些特性的加持下足以支撑起我使用Druid的理由。

1、 Druid能监控那些数据

  1. 数据源
  2. SQL监控 ,对执行的MySQL语句进行记录,并记录执行时间、事务次数等
  3. SQL防火墙 ,对SQL进行预编译,并统计该条SQL的数据指标
  4. Web应用, 对发布的服务进行监控,统计访问次数,并发数等全局信息
  5. URI监控, 对访问的URI进行统计,记录次数,并发数,执行jdbc数等
  6. Session监控, 对用户请求后保存在服务器端的session进行记录,识别出每个用户访问了多少次数据库等
  7. Spring监控 ,(按需配置)利用aop对各个内容接口的执行时间、jdbc数进行记录

2、 如何配置使用Druid

想达到的目标效果,监控sql,监控sql防火墙,监控url,监控session,监控spring 其中监控sql、监控url、基础信息,几乎不怎么需要配置,集成好druid,配置好监控页面,就可以显示。需要我们配置的大概分为3部分,基础连接池配置,基础监控配置,定制化监控配置

2.1 引入Druid的依赖
<!--这里最好引入spring提供的这个starter,在druid-spring-boot-starter这个pom文件中已经引入了源工程的pom文件-->
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.1.16</version>
</dependency>
2.2 连接池基础配置

主要配置用户名,密码,数据库驱动、数据库连接.....以及和连接池有关的配置

spring:
  datasource:
  # 数据源基本配置
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/xust?useSSL=false&set global time_zone="+8:00"
    driver-class-name: com.mysql.cj.jdbc.Driver
    #使用type指定使用Druid
    type: com.alibaba.druid.pool.DruidDataSource
  # 数据源其他配置
    # 初始化连接池的连接数量 大小,最小,最大
    initialSize: 5
    minIdle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭  如果想用SQL防火墙 建议打开
    poolPreparedStatements: true
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    # 通过connectProperties属性来打开mergeSql功能
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
2.3 导入Druid数据源的其他属性

上面的配置文件中和数据库连接池有关的配置属性在Spring Boot是没有的,因此我们需要告诉Spring Boot,让他在启动的时候去找加载这些属性,因此我们需要写一个配置类。 没有写配置类之前的效果:

写一个配置类

@Configuration
public class DruidConfig {

    //配置Druid的其他属性
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")   //让Spring boot去加载这些属性,完成对连接池的初始化
    public DataSource druid(){
        return new DruidDataSource();
    }
}

写配置类后的效果,配置类起作用了:

2.4 配置Durid监控

主要就是配置一个后台管理的Servlet—StarViewServlet和Web监控过滤器—WebStatFilter。具体有哪些初始化参数可以设置,可以参考这两个类以及他们的父类,都是以常量的方式出现的,配置的时候配置他们的值就可以了。

@Configuration
public class DruidConfig {

    //配置Druid数据监控
    //1.配置管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean=new ServletRegistrationBean(new StatViewServlet(),"/druid/*");    //设置后台管理的路径是/druid/*
        Map<String,String> initParams= new HashMap<>();
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        initParams.put("allow","");             //默认就是允许所有访问
        initParams.put("deny","192.168.15.21");  //设置不允许访问ip
        initParams.put("resetEnable","false");   //是否手动清除监控数据
        //设置一些初始化的参数
        bean.setInitParameters(initParams);
        return bean;
    }

    //2.配置一个Web监控的Filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean=new FilterRegistrationBean(new WebStatFilter());

        Map<String,String> initParams=new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");

        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));

        return bean;
    }
}

写一个controller启动看看效果

@Controller
public class HelloController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @ResponseBody
    @RequestMapping(value = "/query")
    public List<Map<String,Object>> hello(){
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from article");
        return maps;

    }
}

启动后在浏览器地址栏输入localhost:8080/query,执行一次请求启动后在浏览器地址栏输入localhost:8080/druid,可以看到Druid后台管理的登录界面

输入刚刚设置的用户名个密码,来到后台管理页面,点击SQL监控就可以看到刚才执行的SQL被记录了。

其实主打开箱即用的SpringBoot,对于上面Druid监控的配置其实我们还可以直接在SpringBoot的配置文件中配置,下面是关于Druid监控的配置示例:

debug: true
spring:
  datasource:
    # Druid监控配置
    druid:
      stat-view-servlet:
        enabled: true      #开启后台管理 ,默认也是true
        url-pattern: /druid/*   #后台管理页面的路径
        login-password: 123456
        login-username: admin
        reset-enable: false    #禁止手动清除监控数据
      web-stat-filter:
        enabled: true
        exclusions: .js,.css,.html,/druid/*
        url-pattern: /*

留言区

还能输入500个字符