如果想要监控自己的项目的访问情况及查看配置信息,druid是一个很好的选择,可能你会问druid是什么?有什么用?优点是什么?

Druid简介

Druid是阿里巴巴开源的数据库连接池,号称是Java语言中最好的数据库连接池,能够提供强大的监控和扩展功能。GitHub地址:https://github.com/alibaba/druid。
Druid有以下优点:
1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
2) 替换DBCP和C3P0,Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDriver和DruidDataSource都支持PasswordCallback。
4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
5) 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。
Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource
下面来说明如何在 spring Boot 中配置使用Druid
整体步骤:
1 —— Druid简单介绍,具体看官网;
2 —— 在pom.xml配置druid依赖包;
3 —— 配置application.properties加入数据库源类型等参数;
4 —— 编写druid servlet和filter提供监控页面访问;
5 —— 输入地址进行测试;

1、添加依赖

如果想要使用druid,首先要先添加druid依赖如下。
<!--druid监控配置 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>

2、配置数据源相关信息(application.properties)

Mysql数据库连接 alibaba数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=
数据源初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
配置获取连接等待超时的时间
spring.datasource.maxWait=60000
配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
spring.datasource.testWhileIdle=true
申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
spring.datasource.testOnBorrow=false
归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
spring.datasource.testOnReturn=false
打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
配置监控统计拦截的filters,去掉后监控界面sql无法统计,’wall’用于防火墙
spring.datasource.filters=stat,wall,log4j
通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true
这时候启动应用就可以看到看到打印信息就是使用我们配置的数据源了:
[main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited

3、配置监控统计功能1

3.1 配置Servlet
package org.lzm.springbootnew.druid;

import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

/**

      • Create with Intellij idea
      • User:lzm
      • Date:2018/7/10
      • Time:22:10
      • druid数据源状态监控.
        /
        @WebServlet(urlPatterns =”/druid/
        “,
        initParams = {
              1. @WebInitParam(name = "allow",value = "127.0.0.1"), //ip白名单(没有配置为空,则允许所有访问)
              2. @WebInitParam(name = "deny",value = ""),//ip黑名单(存在时,deny优先于allow)
              3. @WebInitParam(name = "loginUsername",value = "admin1"), //用户名
              4. @WebInitParam(name = "loginPassword",value = "123456"),//密码
              5. @WebInitParam(name = "resetEnable",value = "false")//禁用HTML页面上的"resetAll"功能

              })
              public class DruidStatViewServlet extends StatViewServlet {
              private static final long serialVersionID=1L;
              }
              3.2配置Filter
              package org.lzm.springbootnew.druid;

        import com.alibaba.druid.support.http.WebStatFilter;

        import javax.servlet.annotation.WebFilter;
        import javax.servlet.annotation.WebInitParam;

        /**

            • Create with Intellij idea
            • User:lzm
            • Date:2018/7/10
            • Time:22:06
            • druid过滤器
              /
              @WebFilter(filterName = “druidWebStatFilter”,urlPatterns = “/
              “,
              initParams ={
              1. @WebInitParam(name="exclusions",value = "*.js,*.gif,*.jpg,*.bmp,*.css,*.ico,/druid/*")
              2. //忽略资源

              })
              public class DruidStatFilter extends WebStatFilter {
              }
              需要在启动类上面添加@ServletComponentScan注解(使spring能够扫描到我们自己编写的servlet和filter),不然访问不到页面(404)。

              4、配置监控系统方式2

              以上配置的监控方式是使用了原生的servlet,filter方式,然后通过@ServletComponentScan进行启动扫描包的方式进行处理的,你会发现我们的servlet,filter根本没有任何的编码。
              在这里我们将使用另外一种方式进行处理:使用代码注册Servlet:
              @ConfigurationProperties会把配置文件的参数自动赋值到dataSource里。
              druidStatViewServlet()配置监控界面。
              druidWebStatViewFilter()编写过滤器,配合druid监控的使用。
              package org.lzm.springbootnew.druid;

        import com.alibaba.druid.pool.DruidDataSource;
        import com.alibaba.druid.support.http.StatViewServlet;
        import com.alibaba.druid.support.http.WebStatFilter;
        import org.apache.tomcat.jdbc.pool.DataSource;
        import org.slf4j.Logger;
        import org.slf4j.LoggerFactory;
        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.boot.context.properties.ConfigurationProperties;
        import org.springframework.boot.web.servlet.FilterRegistrationBean;
        import org.springframework.boot.web.servlet.ServletRegistrationBean;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;

        import java.sql.SQLException;

        /**

            • Create with Intellij idea
            • User:lzm
            • Date:2018/7/10
            • Time:17:43
              */
              @Configuration
              public class DruidConfig {
              private Logger logger=LoggerFactory.getLogger(DruidConfig.class);
              @Bean
              @ConfigurationProperties(“spring.datasource”)
              public DruidDataSource druidDataSource(){

              1. DruidDataSource druidDataSource=new DruidDataSource();
              2. return druidDataSource;

              }
              /*

              • 注册一个StatViewServlet
                /
                @Bean
                public ServletRegistrationBean druidStatViewServlet(){
                ServletRegistrationBean servletRegistrationBean=new ServletRegistrationBean(new StatViewServlet(),”/druid/
                “);
                //添加初始化参数initParams
                //白名单
                servletRegistrationBean.addInitParameter(“allow”,”127.0.0.1”);

                //ip黑名单(存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
                servletRegistrationBean.addInitParameter(“deny”,””);
                //登录查看信息的账号和密码
                servletRegistrationBean.addInitParameter(“loginUsername”,”admin”);
                servletRegistrationBean.addInitParameter(“loginPassword”,”123456”);
                //是否能够重置数据
                servletRegistrationBean.addInitParameter(“resetEnable”,”false”);
                return servletRegistrationBean;
                }
                /**

              • 注册一个:filterRegistrationBean

              • @return

                /
                @Bean
                public FilterRegistrationBean druidStatFilter(){
                FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean(new WebStatFilter());
                //添加过滤规则
                filterRegistrationBean.addUrlPatterns(“/
                “);
                //filterRegistrationBean.addInitParameter(“urlPatterns”,”/“);
                //添加不需要忽略的格式信息
                filterRegistrationBean.addInitParameter(“exclusions”,”
                .js,gif,.jpg,.png,.css,.ico,/druid2/“);
                return filterRegistrationBean;
                }
                }
                在注入的两个bean中,一个是StatViewServlet(),一个是WebStatFilter()
                StatViewServlet是一个标准的javax.servlet.http.HttpServlet
                1.配置url-pattern
                根据配置中的url-pattern来访问内置监控页面,如果是上面的配置/druid/*,内置监控页面的首页是/druid/index.html
                2配置allow和deny
                判断规则:
                deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
                如果allow没有配置或者为空,则允许所有访问
                其中
                128.242.127.1/24
                24表示,前面24位是子网掩码,比对的时候,前面24位相同就匹配。
                不支持IPV6
                由于匹配规则不支持IPV6,配置了allow或者deny之后,会导致IPV6无法访问。
                3.配置resetEnable
                在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,会导致所有计数器清零,重新计数。你可以通过配置参数关闭它。
                WebStatFilter用于采集web-jdbc关联监控的数据。
                exlusions配置
                经常需要排除一些不必要的url,比如.js,/jslib/等等。配置在init-param中。

        以上2种配置监控的方式,个人还是比较喜欢第2种方式。
        启动应用就可以访问:http://127.0.0.1:8080/druid/index.html
        出现以下页面

      • 输入用户名:admin和密码:123456就可以登录成功了,然后查看监控信息。

        可参考地址:https://www.jianshu.com/p/e3cd2e1c2b0c

springboot中使用druid和监控配置的更多相关文章

  1. springboot 中使用Druid 数据源提供数据库监控

    一.springboot 中注册 Servlet/Filter/Listener 的方式有两种,1 通过代码注册 ServletRegistrationBean. FilterRegistration ...

  2. springboot中加入druid对sql进行监控

    springboot作为现在十分流行的框架,简化Spring应用的初始搭建以及开发过程,现在我们就使用springboot来进行简单的web项目搭建并对项目sql进行监控. 项目的搭建就省略了,spr ...

  3. 15、Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52001740目录(?)[-] 1添加Maven依赖 或jar包 2配置数据源相关信息 3 ...

  4. SpringBoot中对SpringMVC的自动配置

    https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developin ...

  5. SpringBoot:spring boot使用Druid和监控配置

    Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能. Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource 业 ...

  6. Spring Boot使用Druid和监控配置

    Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource 整体步骤: (1)    --   Druid简单介绍,具体看官网: (2)     ...

  7. 【转】spring boot使用Druid和监控配置

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012100371/article/details/76602612 Druid是Java语言中最好 ...

  8. (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    Spring Boot 系列博客] 更多查看博客:http://412887952-qq-com.iteye.com/blog Spring Boot默认的数据源是:org.apache.tomcat ...

  9. Druid数据源监控配置

    在web.xml中添加如下代码 <!-- druid监控 --> <servlet> <servlet-name>DruidStatView</servlet ...

随机推荐

  1. 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  2. 模仿 AppStore 顶部动画

    App Store 顶部动画 App Store 中 Games.Apps.Updates 的顶部动画的特点: 自然状态下是大标题,右边有一个 button 顶上去时,变成小标题,右边按钮消失 导航栏 ...

  3. 2019年北航OO第一次博客总结

    一.基于度量对程序结构的分析 1. 第一次作业 1.1 基于类的分析的度量 首先,基于类的属性个数,方法个数,每个方法的规模,每个方法的控制分支数目,类总代码规模等特征对本次作业的结构进行分析. 1. ...

  4. IP等级

    IP是Ingress Protection的缩写,IP等级是针对电气设备外壳对异物侵入的防护等级,来源是国际电工委员会的标准IEC 60529,这个标准在2004年也被采用为美国国家标准.  在这个标 ...

  5. MySql登陆密码忘记-解决方案

    方法一:MySQL提供跳过访问控制的命令行参数,通过在命令行以此命令启动MySQL服务器: safe_mysqld --skip-grant-tables& 即可跳过MySQL的访问控制,任何 ...

  6. EF 一对一、一对多、多对多配置语句小记

    数据库实体间的关系无非有这么几种:一对一.一对多.多对多,这些关系在EF框架中分别有不同的创建方式: 1.在"Database First"模式中,这些关系通过SQL语句的方式建立 ...

  7. CSS中的层叠上下文和层叠顺序

    一.什么是层叠上下文和层叠水平 层叠上下文和层叠水平有一点儿抽象.我们可以吧层叠上下问想象成一张桌子,如果有另一个桌子在他旁边,则代表了另一个层叠上下文. Stacking context 1由文件根 ...

  8. Android 开发工具类 25_getJSON

    获取 JSON 数据并解析 import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; im ...

  9. 快速搭建gulp项目实战

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码,而且大 ...

  10. python如何帮我在投资中获取更高收益

    搞技术的大都比较纯粹,比较实在,除了工资之外基本就没有别的收入了(少部分人能接外包赚外块).或许是迫于生活的压力,或许是不甘于固定的工资,或许是出于技术人骨子里的好奇,亦或是这几年关于理财投资的大力宣 ...