springboot集成druid监控

springboot集成druid监控

  1. 引入pom依赖

    <!-- druid数据库连接池 -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>druid</artifactId>
    	<version>1.1.8</version>
    </dependency>
    
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>druid-spring-boot-starter</artifactId>
    	<version>1.2.8</version>
    </dependency>
    
  2. 配置文件配置监控的属性

    注意:如果不想要登录页面,配置文件中可注释掉用户名和密码
    ########## 配置StatViewServlet(监控页面),用于展示Druid的统计信息 ##########
    # 启用StatViewServlet
    spring.datasource.druid.stat-view-servlet.enabled=true
    # 访问内置监控页面的路径,内置监控页面的首页是/druid/index.html
    spring.datasource.druid.stat-view-servlet.url-pattern=/druid\/*
    # 不允许清空统计数据,重新计算
    spring.datasource.druid.stat-view-servlet.reset-enable=false
    # 配置监控页面访问用户名
    #spring.datasource.druid.stat-view-servlet.login-username=admin
    # 配置监控页面访问密码
    #spring.datasource.druid.stat-view-servlet.login-password=admin
    # 允许访问的地址,如果allow没有配置或者为空,则允许所有访问
    #spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
    # 拒绝访问的地址,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝
    #spring.datasource.druid.stat-view-servlet.deny=
    ########## 配置WebStatFilter,用于采集web关联监控的数据 ##########
    # 启动 StatFilter
    spring.datasource.druid.web-stat-filter.enabled=true
    # 过滤所有url
    spring.datasource.druid.web-stat-filter.url-pattern=\/*
    # 排除一些不必要的url
    spring.datasource.druid.web-stat-filter.exclusions=/druid\/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
    # 开启session统计功能
    spring.datasource.druid.web-stat-filter.session-stat-enable=true
    # session的最大个数,默认1000
    spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
    spring.datasource.druid.initial-size=5
    spring.datasource.druid.min-idle=5
    spring.datasource.druid.max-active=20
    # 配置获取连接等待超时的时间
    spring.datasource.druid.max-wait=60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.druid.time-between-eviction-runs-millis=60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.druid.min-evictable-idle-time-millis=30000
    spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
    spring.datasource.druid.test-while-idle=true
    spring.datasource.druid.test-on-borrow=false
    spring.datasource.druid.test-on-return=false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    spring.datasource.druid.pool-prepared-statements=true
    spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
    spring.datasource.druid.filters=stat,wall
    # Spring 监控,利用aop 对指定接口的执行时间,jdbc数进行记录
    spring.datasource.druid.aop-patterns= com.admin.controller.*,com.front.controller.*
    

注意:每个/*符号,走做了转译,复制过去的话需要取消转译符号
3. 运行后,访问方法
(1)可单独访问整个链接 springboot集成druid监控_第1张图片
(2) 需要将页面内嵌在项目中:可在后台写一个方法,返回单独访问的路径

  • 后台

    @RestController
    @RequestMapping("/druid")
    public class DataSource {
    
        @Value("${druid.index}")
        private String druidIndex;
    
    
        @GetMapping("/druid")
        public ResponseInfo druid(HttpServletRequest request) {
            // 127.0.0.1
            String remoteAddr = RequestUtils.getRemoteAddr(request);
            // 访问域名 192.168.1.105
            String serverName = request.getServerName();
            // 访问端口号
            int port = request.getServerPort();
            String url = "http://" + serverName + ":" + port + druidIndex;
            return new ResponseInfo(url);
        }
    }
    
    
  • 配置文件druid.index

     druid.index=/druid/index.html
    
  • 工具类

    /**
     * 获得真实IP地址。在使用了反向代理时,直接用HttpServletRequest.getRemoteAddr()无法获取客户真实的IP地址。
     * 
     * @param request
     *            ServletRequest
     * @return
     */
    public static String getRemoteAddr(ServletRequest request) {
    	String addr = null;
    	if (request instanceof HttpServletRequest) {
    		HttpServletRequest hsr = (HttpServletRequest) request;
    		for (String header : ADDR_HEADER) {
    			if (StringUtils.isBlank(addr) || NUKNOWN.equalsIgnoreCase(addr)) {
    				addr = hsr.getHeader(header);
    			} else {
    				break;
    			}
    		}
    	}
    	if (StringUtils.isBlank(addr) || NUKNOWN.equalsIgnoreCase(addr)) {
    		addr = request.getRemoteAddr();
    	} else {
    		// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按','分割
    		if (addr != null) {
    			int i = addr.indexOf(",");
    			if (i > 0) {
    				addr = addr.substring(0, i);
    			}
    		}
    
    	}
    	return addr;
    }
    
  • 前端

    <template>
      <iframe :src="this.txtUrl" frameborder="0" width="100%" :style="{height:calHeight}" scrolling="auto"></iframe>
    </template>
    
    <script>
    
    export default {
      name: 'datasource',
      data () {
        return {
          txtUrl: ''
        }
      },
      computed: {
          //计算属性 , 设置iframe高度为窗口高度少100px
          calHeight() {
            return (window.innerHeight - 100) + 'px';
          }
        },
      methods: {
        fetchSysteminfo () {
        // 调用的后台的druid方法
          this.$request.fetchDatasource().then(res => {
            if (res.code === 200) {
              this.txtUrl = res.data
            }
          }).then(this.hideTableLoading).catch(this.hideTableLoading)
        }
      },
      created () {
        this.fetchSysteminfo()
      }
    }
    </script>
    

你可能感兴趣的:(mysql,spring,boot,druid,监控)