Springboot集成Druid实现监控功能

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。Druid可以很好的监控DB池连接和SQL的执行情况,天生就是针对监控而生的DB连接池。

官方的参考
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

一、传统web项目(如ssh,ssm)

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.23</version>
</dependency>

使用xml或配置类配置好DruidDataSource

<!--使用druid数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"><!--注入连接属性--><property name="driverClassName" value="xxx"/><property name="url" value="xxx"/><property name="username" value="xxx"/><property name="password" value="xxx"/><!--初始化连接池大小--><property name="initialSize" value="5"></property><!--设置最大连接数--><property name="maxActive" value="20"></property><!--设置等待时间--><property name="maxWait" value="5000"/><!--配置数据源监控的filter--><property name="filters" value="stat"></property></bean>

在web应用中的WEB-INF/web.xml中进行相关配置 

	<servlet><servlet-name>StatViewServlet</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><!--登陆名--><init-param><param-name>loginUsername</param-name><param-value>admin</param-value></init-param><!-- 登录密码--><init-param><param-name>loginPassword</param-name><param-value>2024</param-value></init-param><!--白名单--><init-param><param-name>allow</param-name><param-value></param-value></init-param><!--黑名单--><init-param><param-name>deny</param-name><param-value></param-value></init-param></servlet><servlet-mapping><servlet-name>StatViewServlet</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping><filter><filter-name>WebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><!--过滤的样式--><init-param><param-name>exclusions</param-name><param-value>*.js,*.gif,*.css,*.ico,*.jpg,*.png,/druid/*</param-value></init-param></filter><filter-mapping><filter-name>WebStatFilter</filter-name><servlet-name>StatViewServlet</servlet-name></filter-mapping>

二、springboot中引入原生的druid,依赖和上面一样,编写配置类即可

import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Configuration
public class DruidConfig {//登陆账号private final String USERNAME = "root";//登陆密码private final String PASSWORD = "123";@Value("${spring.datasource.url:#{null}}")private String dbUrl;@Value("${spring.datasource.username: #{null}}")private String username;@Value("${spring.datasource.password:#{null}}")private String password;@Value("${spring.datasource.driverClassName:#{null}}")private String driverClassName;/*** 以下属性可在配置文件自行定义*/private Integer initialSize = 5;private Integer minIdle = 10;private Integer maxActive = 20;private Integer maxWait = 60000;@Bean@Primarypublic DruidDataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(this.dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);if (initialSize != null) {datasource.setInitialSize(initialSize);}if (minIdle != null) {datasource.setMinIdle(minIdle);}if (maxActive != null) {datasource.setMaxActive(maxActive);}if (maxWait != null) {datasource.setMaxWait(maxWait);}List<Filter> filters = new ArrayList<>();filters.add(statFilter());filters.add(wallFilter());datasource.setProxyFilters(filters);return datasource;}@Beanpublic ServletRegistrationBean druidServlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(new StatViewServlet());servletRegistrationBean.addUrlMappings("/druid/*");Map<String, String> initParameters = new HashMap<>();//禁用HTML页面上的“Rest All”功能initParameters.put("resetEnable", "false");//ip白名单(没配置则允许所有访问)//initParameters.put("allow", "");//ip黑名单,如果某个ip同时存在,deny优先于allow//initParameters.put("deny", "");initParameters.put("loginUsername", USERNAME);initParameters.put("loginPassword", PASSWORD);servletRegistrationBean.setInitParameters(initParameters);return servletRegistrationBean;}@Beanpublic StatFilter statFilter() {StatFilter statFilter = new StatFilter();//慢sql记录statFilter.setLogSlowSql(true);statFilter.setMergeSql(true);//超过多少时间为慢sqlstatFilter.setSlowSqlMillis(3000);return statFilter;}@Beanpublic WallFilter wallFilter() {WallFilter wallFilter = new WallFilter();//允许执行多条SQLWallConfig config = new WallConfig();config.setMultiStatementAllow(true);wallFilter.setConfig(config);return wallFilter;}
}

三、springboot druid starter方式

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

按需配置application.yml的内容

spring:datasource:url: ******username: ******password: ******driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource  # 指定数据源类型######### 连接池 配置 ##########druid:# 配置初始化大小、最小、最大initial-size: 5minIdle: 10max-active: 20# 配置获取连接等待超时的时间(单位:毫秒)max-wait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
#      time-between-eviction-runs-millis: 2000# 配置一个连接在池中最小生存的时间,单位是毫秒
#      min-evictable-idle-time-millis: 600000
#      max-evictable-idle-time-millis: 900000# 用来测试连接是否可用的SQL语句,默认值每种数据库都不相同,这是mysql
#      validationQuery: select 1# 应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用
#      testWhileIdle: true# 如果为true,默认是false,应用向连接池申请连接时,连接池会判断这条连接是否是可用的
#      testOnBorrow: false# 如果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用
#      testOnReturn: false# 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle
#      poolPreparedStatements: true# 要启用PSCache,必须配置大于0,当大于0时, poolPreparedStatements自动触发修改为true,# 在Druid中,不会存在Oracle下PSCache占用内存过多的问题,# 可以把这个数值配置大一些,比如说100
#      maxOpenPreparedStatements: 20# 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作
#      keepAlive: true# Spring 监控,利用aop 对指定接口的执行时间,jdbc数进行记录aop-patterns: "com.springboot.template.dao.*"########### 启用内置过滤器(第一个 stat必须,否则监控不到SQL)##########filters: stat,wall,log4j2# 自己配置监控统计拦截的filterfilter:# 开启druiddatasource的状态监控stat:enabled: truedb-type: mysql# 开启慢sql监控,超过2s 就认为是慢sql,记录到日志中log-slow-sql: trueslow-sql-millis: 2000# 日志监控,使用slf4j 进行日志输出
#        slf4j:
#          enabled: true
#          statement-log-error-enabled: true
#          statement-create-after-log-enabled: false
#          statement-close-after-log-enabled: false
#          result-set-open-after-log-enabled: false
#          result-set-close-after-log-enabled: false########## 配置WebStatFilter,用于采集web关联监控的数据 ##########web-stat-filter:# 启动 StatFilterenabled: true# 过滤所有urlurl-pattern: /*# 排除一些不必要的urlexclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"# 开启session统计功能session-stat-enable: true# session的最大个数,默认100session-stat-max-count: 1000########## 配置StatViewServlet(监控页面),用于展示Druid的统计信息 ##########stat-view-servlet:# 启用StatViewServletenabled: true# 访问内置监控页面的路径,内置监控页面的首页是/druid/index.htmlurl-pattern: /druid/*# 不允许清空统计数据,重新计算reset-enable: false# 配置监控页面访问密码login-username: rootlogin-password: 123# 允许访问的地址,如果allow没有配置或者为空,则允许所有访问
#        allow:# 拒绝访问的地址,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝
#        deny:

访问监控页面

页面简单介绍 

1、数据源页面:是当前DataSource配置的基本信息,上述配置的Filter可以在里面找到,如果没有配置Filter(一些信息会无法统计,例如“SQL监控”,会无法获取JDBC相关的SQL执行信息)。
2、SQL监控页面:统计了所有SQL语句的执行情况。
3、URL监控页面:统计了所有Controller接口的访问以及执行情况。
4、Spring 监控页面,利用aop 对指定接口的执行时间,jdbc数进行记录。
5、SQL防火墙页面:druid提供了黑白名单的访问,可以清楚的看到sql防护情况。
6、Session监控页面:可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数。
7、JSONAPI 页面:通过api的形式访问Druid的监控接口,api接口返回Json形式数据。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/265254.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AOSP10 替换系统launcher

本文实现将原生的launcher 移除&#xff0c;替换成我们自己写的launcher。 分以下几个步骤&#xff1a; 一、新建一个自己的launcher项目。 1.直接使用android studio 新建一个项目。 2.修改AndroidManifest.xml <applicationandroid:persistent"true"androi…

nginx实现http反向代理

一、代理概述 1、代理概念 1.1 正向代理&#xff08;Forward Proxy&#xff09; 概念&#xff1a;正向代理是位于客户端和目标服务器之间的代理服务器&#xff0c;代表客户端向目标服务器发送请求。客户端将请求发送给代理服务器&#xff0c;然后代理服务器将请求转发给目标服…

Prompt 编程的优化技巧

一、为什么要优化 一&#xff09;上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文&#xff0c;比如你输入超过 16k 的长文本&#xff0c;ChatGPT 会提示文本过大&#xff0c;为了避免 GPT 无法回复&#xff0c;需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…

【手机端测试】adb基础命令

一、什么是adb adb&#xff08;Android Debug Bridge&#xff09;是android sdk的一个工具 adb是用来连接安卓手机和PC端的桥梁&#xff0c;要有adb作为二者之间的维系&#xff0c;才能让用户在电脑上对手机进行全面的操作。 Android的初衷是用adb这样的一个工具来协助开发人…

第103讲:配置Mycat的Schema逻辑库列表

文章目录 1.Schema逻辑库2.自定义Mycat连接后显示那些Schema 1.Schema逻辑库 使用Mycat登录到数据库后&#xff0c;发现仅显示了一个TESTDB&#xff0c;这个TESTDB并不是后台数据库节点中的数据库&#xff0c;只是Mycat定义的逻辑库Schema&#xff0c;接下来我们就来说明如果自…

蓝桥杯Learning

Part 1 递归和递推 1. 简单斐波那契数列 n int(input())st [0]*(47) # 注意这个地方&#xff0c;需要将数组空间设置的大一些&#xff0c;否则会数组越界 st[1] 0 st[2] 1 # 这个方法相当于是递推&#xff0c;即先求解一个大问题的若干个小问题 def dfs(u):if u 1:print(…

CKA认证,开启您的云原生之旅!

在当今数字化时代&#xff0c;云计算已经成为企业和个人发展的关键技术。而获得CKA&#xff08;Certified Kubernetes Administrator&#xff09;认证&#xff0c;将是您在云原生领域迈出的重要一步。 CKA认证是由Kubernetes官方推出的权威认证&#xff0c;它旨在验证您在Kuber…

OSI模型

OSI模型 TCP/IP参考模型 TCP/IP常见协议 应用层 FTP&#xff08;用于文件的下载和上传&#xff0c;采用C/S结构&#xff09; Telnet&#xff08;用于远程登陆服务&#xff09; DNS&#xff08;域名解析&#xff09; HTTP&#xff08;接收和发布Html页面&#xff09; 传输层…

MetaGPT 1 安装与配置踩坑实录

安装 与 配置直接参考这里就行&#xff1a;Hugging Muti Agent&#xff08;二月学习&#xff09; - 飞书云文档 (feishu.cn) 这里按照教程安装的是metagpt 0.6.6 &#xff0c;经过跟0.7.0对比&#xff0c;个人认为0.7对其他llm接入可能更好&#xff0c;文档也更清晰。 0.6.6的…

VUE3:统计分析页面布局+自适应页面参考

一、布局 <template><div class"container1"><div class"form white"><el-form :inline"true" :rules"rules" :model"queryParams" label-width"80px" ref"querParmRef"><e…

java springmvc/springboot 项目通过HttpServletRequest对象获取请求体body工具类

请求 测试接口 获取到的 获取到打印出的json字符串里有空格这些&#xff0c;在json解析的时候正常解析为json对象了。 工具类代码 import lombok.extern.slf4j.Slf4j; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.we…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER作者在2023-03-20发布了一篇关于Fastjson原生反序列化的文章&#xff0c;文章中引入注目的是利用条件限制条件&#xff0c;不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题&#xff0c;其实如果单独去使用一些关键词去搜索&a…

华为手动ipv6-to-ipv4隧道

中间r2的两个接口配置两个地址就行了&#xff0c;其它什么都不用配置 两边出接口R1和R3手动隧道建立&#xff1a;先把IPV4打通&#xff0c;并配置默认路由 再起隧道接口上进行配置&#xff0c;再配置带隧道的默认路由 PC上和上联接口网关只有IPV6地址 最终两个PC可以ping通 …

雾锁王国服务器要开服务器吗?

雾锁王国要开服务器吗&#xff1f;可以使用官方服务器&#xff0c;也可以自己搭建多人联机服务器&#xff0c;更稳定不卡&#xff0c;畅玩开黑。阿腾云分享atengyun.com给大家目前阿里云和腾讯云均提供雾锁王国服务器和一键搭建程序&#xff0c;成本26元即可搭建一台自己的雾锁…

Python爬虫进阶:爬取在线电视剧信息与高级检索

简介&#xff1a; 本文将向你展示如何使用Python创建一个能够爬取在线电视剧信息的爬虫&#xff0c;并介绍如何实现更高级的检索功能。我们将使用requests和BeautifulSoup库来爬取数据&#xff0c;并使用pandas库来处理和存储检索结果。 目录 一、爬取在线电视剧信息 …

YOLOv9尝鲜测试五分钟极简配置

pip安装python包&#xff1a; pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码&#xff1a; import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下&#xff0c;POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…

VR系统的开发流程

虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;系统是一种通过计算机技术模拟出的具有三维视角和交互性的虚拟环境&#xff0c;使用户能够沉浸在其中并与虚拟环境进行交互。这种技术通常利用头戴式显示器和手柄等设备&#xff0c;使用户能够感觉到仿佛身临其境…

【pytorch】函数记录

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 torch.sum()torch.argmax()torch.nn.Parametertorch.unbindtorch.optim.Adam()[^adam]torch.cattorch.unsqueeze()torch.normalize()[^l2]torch.eyetorch.mmto…