SpringBoot整合Druid数据源(实行监控功能)
创始人
2024-05-25 12:46:40
0

在上篇文章中分析了数据连接池(Durid)在应用中可以做到资源重用,提升系统响应速度,避免数据库连接遗漏。它除了是一个高性能数据库连接池之外,更是一个自带监控的数据库连接池 JDDC与Druid

1Druid是什么

Apache Druid是一个实时分析型数据库,旨在对大型数据集进行快速的查询分析("OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景,同时,Druid也通常被用来助力分析型应用的图形化界面,或者当做需要快速聚合的高并发后端API,Druid最适合应用于面向事件类型的数据。

Druid通常应用于以下场景:

  • 点击流分析(Web端和移动端)
  • 网络监测分析(网络性能监控)
  • 服务指标存储
  • 供应链分析(制造类指标)
  • 应用性能指标分析
  • 数字广告分析
  • 商务智能 / OLAP

2 SpringBoot 整合Druid

为了演示Druid的监控功能,这里采用JDBCTemplate来作为sql操作模块

2.1 引入依赖

    org.springframework.bootspring-boot-starter-parent2.1.4.RELEASE org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-jdbccom.alibabadruid-spring-boot-starter1.1.21org.springframework.bootspring-boot-starter-actuatormysqlmysql-connector-javaorg.projectlomboklombok1.18.24

2.2 Druid配置

spring:datasource:druid:url:  jdbc:mysql://localhost:3306/face?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: Liuyifei@@
#      初始化连接数initial-size: 10
#      最大连接max-active: 20
#      连接池中最小连接min-idle: 1
#     获得连接最长等待的时间 毫秒max-wait: 60000
#     配置间隔多久才进行一次检测,检测需要关闭的空闲连接 单位毫秒 60000ms=60s=1mintimeBetweenEvictionRunsMillis: 60000
#     连接最小生存的时间 单位毫秒 300000ms=300s=5minminEvictableIdleTimeMillis: 300000
#     应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用test-while-idle: true
#     如果为true(默认false),应用向连接池申请连接时,连接池会判断这条连接是否是可用的test-on-borrow: false
#     如果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用test-on-return: falsepool-prepared-statements: truemax-open-prepared-statements: 20validation-query-timeout: 500validation-query: select 1#  启用内置过滤器 statfilters: statfilter:stat:db-type: mysql# 开启慢sql监控,超过2s 就认为是慢sql,记录到日志中log-slow-sql: trueslow-sql-millis: 2000enabled: true# Druid监测stat-view-servlet:enabled: true  # 启用StatViewServleturl-pattern: /druid/*    # 访问内置监控页面的路径,内置监控页面的首页是/druid/index.htmlreset-enable: false      # 不允许清空统计数据,重新计算allow: 127.0.0.1         # 允许访问的地址,如果allow没有配置或者为空,则允许所有访问deny:  10.157.147.143    # 拒绝访问的地址,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝login-password: admin    # 配置监控页面访问密码login-username: admin    # 配置监控页面访问账号web-stat-filter:enabled: trueurl-pattern:   /*                                           # 对所有url进行监控exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"   # 排除一些不必要的urlsession-stat-enable: truesession-stat-max-count: 200

2.3 模拟DAO层

@Service
public class UserService {@Autowiredprivate JdbcTemplate template;/*** 查询所有讲师列表* @return*/public List getUserList(){List users = template.query("select * from  uuser", (resultSet, i) -> {User user = new User();user.setId(resultSet.getInt("id"));user.setUsername(resultSet.getString("username"));user.setPassword(resultSet.getString("password"));user.setRoot(resultSet.getString("root"));return user;});return users;}/*** 创建用户信息*/public int createUser(String name,String password,String root){return template.update("insert into uuser(username,password,root) values(?, ?,?)", name,password,root);}/*** 删除用户id* @param id* @return*/public int delUserById(int id){return template.update("delete from uuser where id = ?", id);}/*** 查询总数* @return*/public int getUserCount() {return template.queryForObject("select count(1) from uuser", Integer.class);}}

2.4 模拟Controller

@RestController()
public class UserDemoController {@Autowiredprivate UserService service;@GetMapping("/getUserList")/*** 查询所有讲师列表* @return*/public List getUserList(){return service.getUserList();}@PostMapping("/createUser")/*** 创建用户信息*/public int createUser(@RequestBody User user){return service.createUser(user.getUsername(), user.getPassword(),user.getRoot());}@DeleteMapping("/id")/*** 删除用户id* @param id* @return*/public int delUserById(@PathVariable int id){return  service.delUserById(id);}@GetMapping("/getUserCount")/*** 查询总数* @return*/public int getUserCount() {return  service.getUserCount();}}

3 Druid监控

完成上面所有配置之后,启动应用,访问Druid的监控页面http://localhost:8080/druid/,可以看到如下登录页面:
在这里插入图片描述
输入application.yml配置中spring.datasource.druid.stat-view-servlet.login-username(admin)和spring.datasource.druid.stat-view-servlet.login-password(admin)配置的登录账户与密码,就能看到如下监控页面:
在这里插入图片描述

数据源页面:这里可以看到之前我们配置的数据库连接池信息以及当前使用情况的各种指标。
在这里插入图片描述
SQL监控页面,统计了所有SQL语句的执行情况
在这里插入图片描述
图中监控项上,执行时间、读取行数、更新行数都通过区间分布的方式表示,将耗时分布成8个区间:

  • 0 - 1 耗时0到1毫秒的次数
  • 1 - 10 耗时1到10毫秒的次数
  • 10 - 100 耗时10到100毫秒的次数
  • 100 - 1,000 耗时100到1000毫秒的次数
  • 1,000 - 10,000 耗时1到10秒的次数
  • 10,000 - 100,000 耗时10到100秒的次数
  • 100,000 - 1,000,000 耗时100到1000秒的次数
  • 1,000,000 - 耗时1000秒以上的次数

URI监控页面:统计了所有Controller接口的访问以及执行情况

在这里插入图片描述

Session监控页面:可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数。在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...