当前位置: 首页 > news >正文

【Springboot知识】Springboot进阶-Micrometer指标监控深入解析

文章目录

    • ​​Micrometer 核心概念与标准指标详解
      • **Micrometer 核心概念与标准指标详解**
        • **一、Micrometer 核心概念**
        • **二、Micrometer 标准指标**
          • **1. JVM 监控指标**
          • **2. 系统资源监控**
          • **3. HTTP 请求监控**
          • **4. 数据库监控**
          • **5. 缓存监控**
        • **三、配置与自定义指标**
          • **1. 启用/禁用特定指标**
          • **2. 添加自定义标签**
          • **3. 指标命名规则**
        • **四、监控数据展示示例(Prometheus)**
        • **五、总结**
    • springboot结合Micrometer
      • **Spring Boot 集成 Micrometer 实现指标监控**
        • **一、添加依赖**
        • **二、配置监控端点**
        • **三、自动采集的指标**
        • **四、自定义业务指标**
          • **1. 计数器(Counter)统计订单创建次数**
          • **2. 计时器(Timer)统计方法耗时**
          • **3. 仪表(Gauge)监控队列大小**
        • **五、高级配置**
          • **1. 全局标签(区分环境/区域)**
          • **2. 过滤不需要的指标**
          • **3. 自定义指标命名规则**
        • **六、验证与可视化**
        • **七、总结**
    • 自定义一个Micrometer
      • **一、自定义 MeterRegistry(监控数据上报)**
        • **1. 实现自定义注册中心**
        • **2. 注册自定义 Registry 到 Spring 上下文**
        • **3. 配置 `application.properties`**
      • **二、自定义指标采集逻辑**
        • **1. 创建自定义 Meter(例如统计缓存穿透次数)**
        • **2. 自定义 MeterFilter(过滤或修改指标)**
        • **3. 动态标签(基于请求上下文)**
      • **三、验证自定义效果**
      • **四、注意事项**
    • 关联知识

​​Micrometer 核心概念与标准指标详解

Micrometer 核心概念与标准指标详解

一、Micrometer 核心概念

Micrometer 是一款 监控指标门面库(类似 SLF4J 在日志领域的作用),为 Java 应用提供统一的监控指标采集接口,支持对接 Prometheus、Datadog、InfluxDB 等主流监控系统。以下是其核心组件:

概念说明
Meter指标的最小单元,表示一个可测量的值(如请求数、响应时间)。
MeterRegistry管理所有 Meter 的注册中心,负责将指标发布到监控后端(如 Prometheus)。
MeterProvider创建 Meter 的工厂,支持通过标签(Tags)动态生成指标。
Tags键值对标签,用于为指标添加维度(如 method=GET, status=200)。
Naming Convention指标命名规则(如 snake_casecamelCase),适配不同监控系统的要求。

二、Micrometer 标准指标

Micrometer 内置了多种 自动采集的指标,涵盖 JVM、系统资源、HTTP 请求等关键领域。


1. JVM 监控指标
指标名称类型说明
jvm.memory.usedGaugeJVM 内存使用量(单位:字节)
jvm.memory.committedGaugeJVM 已提交内存(包括未使用的预分配内存)
jvm.threads.liveGauge当前存活线程数
jvm.gc.pauseTimerGC 暂停时间统计(次数、总耗时、最大耗时)
jvm.classes.loadedGauge已加载的类数量

示例配置(自动启用):

management.metrics.enable.jvm=true

2. 系统资源监控
指标名称类型说明
system.cpu.usageGauge系统 CPU 使用率(0~1)
process.cpu.usageGauge当前进程 CPU 使用率
process.files.openGauge进程打开的文件句柄数
process.uptimeGauge进程运行时间(单位:秒)

示例配置:

management.metrics.enable.process=true
management.metrics.enable.system=true
3. HTTP 请求监控

Spring Boot 自动为 Web 应用(如 Spring MVC)生成 HTTP 指标:

指标名称类型说明
http.server.requestsTimerHTTP 请求耗时统计(次数、延迟、状态码等)
http.client.requestsTimerHTTP 客户端请求耗时(如 RestTemplate 调用)

标签示例:
method: HTTP 方法(GET/POST 等)
uri: 请求路径(如 /api/users
status: HTTP 状态码(200/404/500 等)

启用配置:

management.metrics.enable.http=true
4. 数据库监控

集成 HikariCP、Tomcat JDBC 等连接池时自动生成:

指标名称类型说明
jdbc.connections.activeGauge活跃数据库连接数
jdbc.connections.idleGauge空闲数据库连接数
jdbc.connections.maxGauge最大允许连接数

标签示例:
pool: 连接池名称(如 HikariPool-1

5. 缓存监控

支持 Caffeine、EhCache 等缓存框架:

指标名称类型说明
cache.getsCounter缓存查询次数(命中 + 未命中)
cache.hitsCounter缓存命中次数
cache.sizeGauge缓存当前条目数

标签示例:
name: 缓存名称(如 usersCache
result: 结果类型(hit/miss)

三、配置与自定义指标
1. 启用/禁用特定指标
# 禁用 JVM 内存指标
management.metrics.enable.jvm.memory.used=false
2. 添加自定义标签
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return registry -> registry.config().commonTags("region", "us-east-1", "env", "prod");
}
3. 指标命名规则
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsNaming() {return registry -> registry.config().namingConvention(NamingConvention.snakeCase);
}
四、监控数据展示示例(Prometheus)

/actuator/prometheus 端点获取的数据示例:

# HTTP 请求指标
http_server_requests_seconds_count{method="GET",uri="/api/users",status="200"} 42
http_server_requests_seconds_sum{method="GET",uri="/api/users",status="200"} 12.7# JVM 内存使用
jvm_memory_used_bytes{area="heap",id="PS Eden Space"} 256000000
五、总结

核心价值
Micrometer 通过统一 API 屏蔽监控后端差异,开发者只需关注业务指标采集。
标准指标覆盖场景
JVM、HTTP、数据库、缓存等关键组件均已内置监控,开箱即用。
扩展性
通过自定义 MeterRegistryMeter 可集成私有监控系统。

springboot结合Micrometer

Spring Boot 集成 Micrometer 实现指标监控

Micrometer 是 Spring Boot 的官方监控工具库,通过 Actuator 模块提供开箱即用的指标采集能力。以下是完整的集成与自定义指标实现步骤:

一、添加依赖

pom.xml 中添加核心依赖(以 Prometheus 为例):

<!-- Spring Boot Actuator(暴露监控端点) -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><!-- Micrometer 核心库 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-core</artifactId>
</dependency><!-- 对接 Prometheus 的 Registry -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
二、配置监控端点

application.properties 中启用端点并配置 Prometheus:

# 暴露所有 Actuator 端点(生产环境建议按需暴露)
management.endpoints.web.exposure.include=*# 配置应用名称(作为指标前缀)
management.metrics.tags.application=my-springboot-app# 配置 Prometheus 抓取间隔
management.metrics.export.prometheus.step=30s
三、自动采集的指标

Spring Boot 会 自动生成以下指标(无需额外代码):

指标类型示例指标说明
JVM 监控jvm_memory_used_bytesJVM 内存使用量
HTTP 请求http_server_requests_secondsHTTP 接口耗时统计
数据库连接池jdbc_connections_active活跃数据库连接数
系统资源system_cpu_usage系统 CPU 使用率

访问 http://localhost:8080/actuator/prometheus 查看原始指标数据。

四、自定义业务指标
1. 计数器(Counter)统计订单创建次数
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;@Component
public class OrderMetrics {private final Counter orderCreatedCounter;public OrderMetrics(MeterRegistry registry) {// 初始化计数器(带业务标签)orderCreatedCounter = Counter.builder("order.created").description("订单创建次数统计").tag("type", "online") // 静态标签.register(registry);}public void incrementOrderCreated(String userId) {// 动态添加标签(例如用户ID)orderCreatedCounter.bind(Tags.of("user", userId)).increment();}
}

在业务代码中调用:

@Autowired
private OrderMetrics orderMetrics;public void createOrder(Order order) {// 业务逻辑...orderMetrics.incrementOrderCreated(order.getUserId());
}
2. 计时器(Timer)统计方法耗时

使用 @Timed 注解自动记录方法耗时:

import io.micrometer.core.annotation.Timed;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@GetMapping("/users")@Timed(value = "user.fetch.all", description = "查询所有用户的耗时")public List<User> getAllUsers() {// 业务逻辑...return userService.findAll();}
}

或手动记录代码块耗时:

import io.micrometer.core.instrument.Timer;public class PaymentService {private final Timer paymentTimer;public PaymentService(MeterRegistry registry) {paymentTimer = Timer.builder("payment.process.time").description("支付处理耗时").register(registry);}public void processPayment() {Timer.Sample sample = Timer.start(registry);try {// 支付业务逻辑...} finally {sample.stop(paymentTimer);}}
}
3. 仪表(Gauge)监控队列大小
import io.micrometer.core.instrument.Gauge;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.PostConstruct;
import java.util.Queue;@Component
public class MessageQueueMetrics {private final Queue<Message> messageQueue;private final AtomicInteger queueSize = new AtomicInteger(0);public MessageQueueMetrics(Queue<Message> messageQueue, MeterRegistry registry) {this.messageQueue = messageQueue;// 注册 Gauge(动态获取队列大小)Gauge.builder("message.queue.size", queueSize, AtomicInteger::get).description("消息队列当前大小").register(registry);}@Scheduled(fixedRate = 5000)public void updateQueueSize() {queueSize.set(messageQueue.size());}
}
五、高级配置
1. 全局标签(区分环境/区域)
@Bean
public MeterRegistryCustomizer<MeterRegistry> globalTags() {return registry -> registry.config().commonTags("env", "prod", "region", "us-east-1");
}
2. 过滤不需要的指标
@Bean
public MeterFilter excludeJvmThreadMetrics() {return MeterFilter.deny(id -> id.getName().startsWith("jvm.threads"));
}
3. 自定义指标命名规则
@Bean
public MeterRegistryCustomizer<MeterRegistry> namingConvention() {return registry -> registry.config().namingConvention(NamingConvention.snakeCase);
}
六、验证与可视化
  1. 查看原始指标
    访问 http://localhost:8080/actuator/prometheus,搜索自定义指标(如 order_created_total)。

  2. 对接 Prometheus + Grafana
    • 在 prometheus.yml 中添加 Spring Boot 应用的抓取配置:

    scrape_configs:- job_name: 'spring-boot-app'metrics_path: '/actuator/prometheus'static_configs:- targets: ['localhost:8080']
    

    • 在 Grafana 中导入 Spring Boot 仪表板(如 ID 4701)。

七、总结

开箱即用:Spring Boot 自动采集 JVM、HTTP、DB 等核心指标。
灵活扩展:通过 CounterTimerGauge 轻松添加业务指标。
生产就绪:结合 Prometheus + Grafana 实现监控告警与可视化。

自定义一个Micrometer

在 Spring Boot 中自定义 Micrometer 的核心是创建 自定义的 MeterRegistry自定义指标采集逻辑。以下是详细步骤和代码示例:


一、自定义 MeterRegistry(监控数据上报)

1. 实现自定义注册中心
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.step.StepMeterRegistry;
import java.util.concurrent.TimeUnit;public class CustomMeterRegistry extends StepMeterRegistry {private final CustomRegistryConfig config;public CustomMeterRegistry(CustomRegistryConfig config, Clock clock) {super(config, clock);this.config = config;// 设置命名规则(如转驼峰为下划线)config().namingConvention(NamingConvention.snakeCase);start(); // 启动后台线程}@Overrideprotected void publish() {// 自定义上报逻辑(例如将指标发送到 Kafka 或 HTTP API)getMeters().forEach(meter -> {meter.match(gauge -> log.info("Gauge: {}={}", gauge.getId(), gauge.value()),counter -> log.info("Counter: {}={}", counter.getId(), counter.count()),timer -> log.info("Timer: {}={}s", timer.getId(), timer.totalTime(TimeUnit.SECONDS)),// 其他 Meter 类型处理...meter -> {});});}@Overrideprotected TimeUnit getBaseTimeUnit() {return TimeUnit.MILLISECONDS; // 定义时间单位}// 自定义配置类(继承 StepRegistryConfig)public static class CustomRegistryConfig extends StepRegistryConfig {public CustomRegistryConfig() {super("custom"); // 配置前缀为 "custom"}@Overridepublic String prefix() {return "custom.metrics";}}
}
2. 注册自定义 Registry 到 Spring 上下文
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MetricsConfig {@Beanpublic CustomMeterRegistry customMeterRegistry() {CustomMeterRegistry.CustomRegistryConfig config = new CustomMeterRegistry.CustomRegistryConfig();return new CustomMeterRegistry(config, Clock.SYSTEM);}
}
3. 配置 application.properties
# 自定义 Registry 参数
custom.metrics.step=30s    # 数据上报间隔
custom.metrics.enabled=true

二、自定义指标采集逻辑

1. 创建自定义 Meter(例如统计缓存穿透次数)
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;@Component
public class CacheMetrics {private final Counter cachePenetrationCounter;public CacheMetrics(MeterRegistry registry) {// 定义指标名称、描述、标签cachePenetrationCounter = Counter.builder("cache.penetration").description("缓存穿透次数统计").tag("cache", "userCache").register(registry);}public void recordPenetration() {cachePenetrationCounter.increment();}
}

在业务代码中调用:

@Autowired
private CacheMetrics cacheMetrics;public User getUserById(Long id) {User user = cache.get(id);if (user == null) {cacheMetrics.recordPenetration(); // 记录穿透事件user = database.load(id);}return user;
}
2. 自定义 MeterFilter(过滤或修改指标)
import io.micrometer.core.instrument.config.MeterFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic MeterFilter renameTagFilter() {// 将标签名 "method" 改为 "http_method"return MeterFilter.renameTag("http.server.requests", "method", "http_method");}@Beanpublic MeterFilter denyTestEndpoints() {// 禁止统计 "/actuator" 端点的请求return MeterFilter.deny(id -> id.getName().startsWith("http.server.requests") && id.getTag("uri") != null && id.getTag("uri").startsWith("/actuator"));}
}
3. 动态标签(基于请求上下文)

使用 MeterFilter 添加动态标签(例如根据请求头添加租户 ID):

import org.springframework.web.servlet.HandlerInterceptor;public class TenantTagInterceptor implements HandlerInterceptor {private final MeterRegistry registry;public TenantTagInterceptor(MeterRegistry registry) {this.registry = registry;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String tenantId = request.getHeader("X-Tenant-ID");if (tenantId != null) {// 为所有指标添加租户标签registry.config().commonTags("tenant", tenantId);}return true;}
}

注册拦截器:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate MeterRegistry registry;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TenantTagInterceptor(this.registry));}
}

三、验证自定义效果

  1. 查看原始指标数据
    访问 /actuator/prometheus,搜索自定义指标(如 cache_penetration_total)。

  2. 日志验证
    如果自定义的 CustomMeterRegistry 实现了日志输出,检查日志中是否打印指标数据。

  3. 集成测试
    编写测试用例验证指标是否被正确记录:

@SpringBootTest
public class CacheMetricsTest {@Autowiredprivate CacheMetrics cacheMetrics;@Autowiredprivate MeterRegistry registry;@Testpublic void testCachePenetration() {cacheMetrics.recordPenetration();Counter counter = registry.find("cache.penetration").counter();assertThat(counter.count()).isEqualTo(1.0);}
}

四、注意事项

  1. 性能影响
    避免在 publish() 方法中执行阻塞操作(如同步 HTTP 请求),使用异步或批处理上报。

  2. 标签基数爆炸
    动态标签(如用户 ID)可能导致指标数量激增,建议仅用于低基数字段(如租户、区域)。

  3. 注册中心冲突
    如果同时使用多个 MeterRegistry(如 Prometheus 和自定义),确保指标不会重复上报。

  4. 命名规范
    遵循监控系统的命名规则(如 Prometheus 要求小写和下划线)。

通过以上步骤,你可以在 Spring Boot 中灵活自定义 Micrometer,适配私有监控系统或实现特定业务指标的采集。

关联知识

【Springboot知识】Springboot进阶-Actuator深入理解
【Micrometer官网地址】

相关文章:

【Springboot知识】Springboot进阶-Micrometer指标监控深入解析

文章目录 ​​Micrometer 核心概念与标准指标详解**Micrometer 核心概念与标准指标详解****一、Micrometer 核心概念****二、Micrometer 标准指标****1. JVM 监控指标****2. 系统资源监控****3. HTTP 请求监控****4. 数据库监控****5. 缓存监控** **三、配置与自定义指标****1.…...

Linux 的准备工作

1.root用户登录 首先讲一下root账户怎么登陆 直接 ssh root 公ip地址就可以了 比如我的是腾讯云的 这个就是公ip 下面所有普通用户的操作都是在root账户下进行的 2.普通用户创建 创建用户指令 adduser 用户名 比如说这个指令 我创建了一个ly_centos的普通用户 3.普通用…...

LLM实现模型并行训练:deepspeed 是什么; transformers` 怎么实现模型并行训练吗?

LLM实现模型并行训练:deepspeed 是什么 DeepSpeed是一个由微软开发的深度学习优化库,旨在帮助研究人员和工程师更高效地训练大规模神经网络。它提供了一系列的优化技术,包括混合精度训练、模型并行、数据并行、ZeRO优化等,以提高训练速度、减少内存占用,并支持在多个GPU或…...

STM32 HAL库之EXTI示例代码

外部中断按键控制LED灯 在main.c中 HAL_Init(); 初始化Flash&#xff0c;中断优先级以及HAL_MspInit函数&#xff0c;也就是 stm32f1xx_hal.c 中 HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash prefetch */ #if (PREFETCH_ENABLE ! 0) #if defined(STM32F101x6) || …...

数字人情感表达突破:微表情自动生成的算法革新

——从量子化建模到联邦学习的全链路技术革命 一、行业痛点&#xff1a;传统数字人微表情的“三重困境” 2025年数据显示&#xff0c;83%的虚拟角色因微表情失真导致用户留存率下降&#xff08;头部游戏公司实测数据&#xff09;。传统方案面临核心矛盾&#xff1a; 制作成本…...

Django软删除功能完整指南:构建图书馆项目

Django软删除功能完整指南:构建图书馆项目 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django软删除功能完整指南:构建图书馆项目第 1 步:安装所需包第 2 步:设置您的 Django…...

联邦学习:AI 与大数据融合的创新力量

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;和大数据无疑是推动各行业发展的两大核心技术。AI 凭借其强大的数据分析和预测能力&#xff0c;为企业提供了智能化决策支持&#xff1b;大数据则通过海量数据的收集与存储&#xff0c;为 AI 模型的训练提供了丰…...

idea解决tomcat项目页面中文乱码

概述 解决tomcat项目页面中文乱码问题-Dfile.encodingUTF-8 设置...

Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图,Kotlin

Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图&#xff0c;Kotlin <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><u…...

解锁Midjourney创作潜能:超详细提示词(Prompts)分类指南

AI生图自由&#xff01;就来 ChatTools (https://chat.chattools.cn)&#xff0c;畅享Midjourney免费无限绘画。同时体验GPT-4o、Claude 3.7 Sonnet、DeepSeek等强大模型。 为了帮助大家更好地驾驭Midjourney&#xff0c;我们精心整理并分类了大量常用且效果出众的提示词。无论…...

HBuilder运行uni-app程序报错【Error: listen EACCES: permission denied 0.0.0.0:5173】

一、错误提示&#xff1a; 当使用HBuilder运行uni-app项目的时候提示了如下错误❌ 15:11:03.089 项目 project 开始编译 15:11:04.404 请注意运行模式下&#xff0c;因日志输出、sourcemap 以及未压缩源码等原因&#xff0c;性能和包体积&#xff0c;均不及发行模式。 15:11:04…...

k8s node inode被耗尽如何处理?

当 Kubernetes 节点因 inode 被耗尽导致 Pod 无法调度或运行异常时&#xff0c;需结合 Kubernetes 特性和 Linux 系统管理方法处理。以下是详细步骤&#xff1a; 1. 确认 inode 耗尽 首先登录问题节点&#xff0c;检查 inode 使用率&#xff1a; # 查看全局 inode 使用情况 …...

机器学习之PCA主成分分析详解

文章目录 引言一、PCA的概念二、PCA的基本数学原理2.1 内积与投影2.2 基2.3 基变换2.4 关键问题及优化目标2.5 方差2.6 协方差2.7 协方差矩阵2.8 协方差矩阵对角化 三、PCA执行步骤总结四、PCA参数解释五、代码实现六、PCA的优缺点七、总结 引言 在机器学习领域&#xff0c;我…...

leetcode797图论-对邻接矩阵和邻接表不同形式进行dfs与bfs遍历方法

给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节点 graph[i][j]存在一条有向…...

Spark核心架构与RDD:大数据处理的基石

Apache Spark作为新一代分布式计算引擎&#xff0c;其高效性和灵活性源于独特的运行架构与核心数据结构RDD。本文简要解析Spark的核心组件及RDD的核心特性&#xff0c;帮助开发者快速理解其设计思想。 一、Spark运行架构 Spark采用标准的**Master-Slave架构&#xff0c;核心组…...

Python Orange:托拉拽玩转机器学习、数据挖掘!

相比写代码做数据挖掘&#xff0c;Python Orange简直是懒人和新手的救星&#xff01;传统编程得敲一行行代码&#xff0c;调库、debug 累得要死&#xff0c;而Orange靠拖拽就能搞定数据导入、清洗、可视化、建模、评估和无监督学习&#xff0c;支持跨Windows、Mac、Linux平台随…...

K8S学习之基础七十七:istio实现超时功能

istio实现超时功能 模拟客户端调用 nginx&#xff0c;nginx 将请求转发给 tomcat。nginx 服务设置了超时时间为2秒&#xff0c;如果超出这个时间就不在等待&#xff0c;返回超时错误。tomcat服务设置了响应时间延迟10秒&#xff0c;任何请求都需要等待10秒后才能返回。client …...

EFA-YOLO:一种高效轻量的火焰检测模型解析

论文地址:https://arxiv.org/pdf/2409.12635 目录 论文地址:https://arxiv.org/pdf/2409.12635 一、论文结构解析 二、核心创新点解读 1. EAConv(高效注意力卷积) 2. EADown(高效下采样) 三、实验结果对比 1. 精度指标对比 2. 实际检测效果 四、应用场景展望 …...

PyQt6实例_A股财报数据维护工具_解说并数据与完整代码分享

目录 1 20250403之前的财报数据 2 整个项目代码 3 工具使用方法 3.1 通过akshare下载 3.2 增量更新 3.3 查看当前数据情况 3.4 从数据库中下载数据 视频 1 20250403之前的财报数据 通过网盘分享的文件&#xff1a;财报三表数据20250403之前.7z 链接: https://pan.ba…...

【AAOS】【源码分析】CarAudioService(二)-- 功能介绍

汽车音频是 Android 汽车操作系统 (AAOS) 的一项功能,允许车辆播放信息娱乐声音,例如媒体、导航和通信。AAOS 不负责具有严格可用性和时间要求的铃声和警告,因为这些声音通常由车辆的硬件处理。将汽车音频服务集成在汽车中,彻底改变了驾驶体验,为驾驶员和乘客提供了音乐、…...

Python星球日记 - 第18天:小游戏开发(猜数字游戏)

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日记 - 第17天&#xff1a;数据可视化 名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。&#xff08;屈原《离骚》&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程…...

ShopXO v2.2.4开源商城手动部署(保姆级)+异常处理

ShopXO v2.2.4开源商城手动部署(保姆级) 1.项目了解 1.1项目简洁 ShopXO国内领先企业级免费开源电商系统&#xff01; 求实进取、创新专注、自主研发、国内领先企业级电商系统解决方案。遵循MIT开源协议发布&#xff0c;无需授权、可商用、可二次开发、满足99%的电商运营需…...

Android Studio - 解决 Please Select Android SDK

一、出现的问题 点击 Run 后弹窗&#xff0c;图一位置出现图二提示。 二、解决办法 进入 Tools -> SDK Manager&#xff0c;在 Android SDK Location 点击 Edit&#xff0c;一直 Next 就解决了。...

Java 列表初始化全解析:7种方式详解与最佳实践

文章目录 **引言****1. 传统逐个添加元素****特点****注意事项** **2. Arrays.asList() 构造函数****特点****注意事项** **3. 双括号初始化&#xff08;匿名内部类&#xff09;****特点****注意事项** **4. Java 9 List.of()&#xff08;不可变列表&#xff09;****特点****注…...

python之安装PaddlePaddle和PaddleX解析pdf表格

目录标题 飞桨PaddlePaddle本地安装教程1-1. 基于 Docker 安装飞桨1-2. 基于 pip 安装飞桨2. 我两个环境 都选择的是pip 安装10. 如果报错10. 离线安装 飞桨PaddlePaddle本地安装教程 源码下载&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/release/3.0-beta1/do…...

MLA(Multi-Level Adaptive)融合算子全院级医疗编程探析(代码版)

MLA&#xff08;Multi-Level Adaptive&#xff09;融合算子的AI医疗技术原理、实现方法及医疗应用场景的深度解析&#xff1a; 一、MLA融合算子技术本质 1. 核心设计理念 MLA是一种硬件感知的算子重组技术&#xff0c;通过打破传统深度学习框架的算子边界&#xff0c;实现&a…...

Python----概率论与统计(概率论,互斥事件和概率和,非互斥事件和概率和,独立性事件,生日问题,条件概率)

一、概率论 1.1、概率论 概率论是研究随机现象的一门数学学科。它为不确定性提供了一个量化的框架&#xff0c;允许我们衡量事件发生的可能性。 概率论研究随机现象&#xff0c;用于量化和分析不确定性。它的基本概念包括&#xff1a; 样本空间&#xff08;Sample Space&…...

Ubuntu24.04 编译 Qt 源码

一&#xff1a;Ubuntu 把 Qt 拆成了多个源码包&#xff1a; 1. 基础包 2. 可选包 二&#xff1a;编译 qtbase-opensource-src 1. 配置源&#xff08;修改 /etc/apt/sources.list.d/ubuntu.sources) 2. 下载代码 apt source qtbase-opensource-src3. 安装依赖 sudo a…...

数据库无法插入中文字符

INSERT INTO book VALUES (1, ‘楚辞’, ‘屈原’, ‘中国文联出版社’, ‘0’) 1366 - Incorrect string value: ‘\xE6\xA5\x9A\xE8\xBE\x9E’ for column ‘name’ at row 1 查询时间: 0 秒 查看字符集设置 SHOW VARIABLES LIKE character_set%; SHOW VARIABLES LIKE colla…...

在Ubuntu系统如何让MySQL服务器支持远程连接

目录 问题描述 解决方案 步骤一&#xff1a;检查MySQL配置文件 ​编辑 步骤二&#xff1a;修改bind-address参数 ​编辑 步骤三&#xff1a;重启MySQL服务 步骤四&#xff1a;验证更改 步骤五&#xff1a;检查防火墙设置 步骤六&#xff1a;测试远程连接 注意事项 …...

【期中准备】电路基础(西电)

电路 题型&#xff1a;填空&#xff0c;简答&#xff08;概念&#xff09;&#xff0c;计算 PPT 1.X 电压和电流的参考方向一致&#xff0c;称为关联参考方向 消耗功率为正数&#xff1a;负载和电源由功率正负来定义 电路中所有原件功率之和为0&#xff08;“自产自销”&#…...

mysql 重复读自己事务中可以看到新插入数据

推荐好文 吃透MySQL&#xff08;六&#xff09;&#xff1a;事务详细介绍 地址转发https://blog.csdn.net/u013277209/article/details/113585022 开启客户端 mysql -u 账号名 -p 输入密码 在一个 事务中 mysql> set session transaction isolation level repeatable…...

Java后端开发-面试总结(集结版)

第一个问题&#xff0c;在 Java 集合框架中&#xff0c;ArrayList和LinkedList有什么区别&#xff1f;在实际应用场景中&#xff0c;应该如何选择使用它们&#xff1f; ArrayList 基于数组&#xff0c;LinkedList 基于双向链表。 在查询方面 ArrayList 效率高&#xff0c;添加…...

Python第八章03:Pyecharts快速入门

# pyecharts快速入门# 一、折线图基础应用# 导入python包 from pyecharts.charts import Line from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts,TooltipOpts,DataZoomOpts# 创建一个折线图对象 line Line() # 给折线图对象添加x、y轴的数据 l…...

BUUCTF-web刷题篇(17)

26.BabyUpload 源码&#xff1a;https://github.com/imaginiso/GXY_CTF/tree/master/Web/babyupload 查看题目源码&#xff1a; 写着&#xff1a;SetHandler application/x-httpd-php 通过源码可以看出这道文件上传题目主要还是考察.htaccess配置文件的特性&#xff0c;倘若…...

openfga原理及简单落地方案设计

源码地址 https://github.com/openfga OpenFGA 是一款高性能且灵活的授权/许可引擎,专为开发人员打造,灵感来自Google Zanzibar。它将强大的基于关系的访问控制 (ReBAC)和基于属性的访问控制 (ABAC)概念与领域特定语言相结合,可以轻松制定可以扩展和发展到任何规模的任何用例…...

混合并行技术在医疗AI领域的应用分析(代码版)

混合并行技术(专家并行/张量并行/数据并行)通过多维度的计算资源分配策略,显著提升了医疗AI大模型的训练效率与推理性能。以下结合技术原理与医疗场景实践,从策略分解、技术对比、编排优化及典型案例等维度展开分析: 一、混合并行技术:突破单卡算力限制 1. 并行策略三维分…...

深信服安全运营面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

基于IDEA+SpringBoot+Mave+Thymeleaf的系统实现

一. 安装IntelliJ IDEA 下载并安装IntelliJ IDEA Ultimate或Community版 2024年最新版IntelliJ IDEA下载安装过程&#xff08;含Java环境搭建&#xff09; 二、下载 Maven 访问官网下载 打开浏览器&#xff0c;访问 Maven 官方下载页面&#xff1a; Download Apache Maven –…...

用Python爬虫抓取数据并保存为JSON的完整指南

本文将深入探讨如何利用Python爬虫技术抓取网页数据&#xff0c;并通过专业的数据处理流程将其保存为JSON格式。我们将以电商网站产品数据抓取为例&#xff0c;演示从基础实现到生产级优化的完整流程&#xff0c;涵盖反爬策略应对、数据清洗和大规模存储等关键环节。 一、环境…...

Tigshop| 一个基于Java的开源商城系统

在电商竞争愈发激烈的当下&#xff0c;一个强大且适配的商城系统是商家制胜的法宝 Tigshop官网 - 开源商城系统https://www.tigshop.com/ 一、卓越技术根基​ 前端体验升级​ Tigshop 运用 Vue3 与 TypeScript 搭建前端。Vue3 的响应式系统和 Composition API&#xff0c;让页…...

Windows 部署项目 apache + mod_wsgi,nginx + waitress

文章目录 1、apache mod_wsgi&#xff0c;nginx waitress两种部署方式的区别2、以nginx waitress为例 有些项目必须部署在windows上&#xff0c;有IIS wfastcgi、apache mod_wsgi&#xff0c;nginx waitress部署方式 1、apache mod_wsgi&#xff0c;nginx waitress两种…...

RabbitMQ惰性队列的工作原理、消息持久化机制、同步刷盘的概念、延迟插件的使用方法

惰性队列工作原理 惰性队列通过尽可能多地将消息存储到磁盘上来减少内存的使用。与传统队列相比&#xff0c;惰性队列不会主动将消息加载到内存中&#xff0c;而是尽量让消息停留在磁盘上&#xff0c;从而降低内存占用。尽管如此&#xff0c;它并不保证所有操作都是同步写入磁…...

Prompt_Engineering提示词工程(一)

一、Prompt&#xff08;提示词&#xff09; Prompt&#xff08;提示词&#xff09;是给AI模型交互文本片段&#xff0c;用于指导模型生成符合预期输出结果&#xff0c;提示词的目的是为模型提供一个上下文的任务&#xff0c;以便模型能够更准确地理解用户的意图&#xff0c;并…...

探索 Shell 中的扩展通配符:从 Bash 到 Zsh

在 Unix 系统中&#xff0c;通配符&#xff08;globbing&#xff09;是 shell 的核心功能&#xff0c;用于快速匹配文件或目录。基础通配符&#xff08;如 *、?、[]&#xff09;虽简单实用&#xff0c;但在复杂场景下往往力不从心。为此&#xff0c;许多现代 shell 提供了“扩…...

电脑清洁常用工具

清洁布&#xff1a;用于擦拭电脑表面和屏幕。一般选择柔软、不掉毛的微纤维清洁布&#xff0c;它能有效去除灰尘和污渍&#xff0c;同时不会刮伤电脑表面。压缩空气罐&#xff1a;可以产生强力气流&#xff0c;用于吹走电脑内部的灰尘&#xff0c;如主机箱、键盘缝隙等部位的灰…...

深入理解Spring是如何解决循环依赖的

1、简介循环依赖 在 Spring 框架中&#xff0c;循环依赖是指两个或多个 Bean 互相依赖&#xff0c;形成了一个闭环。例如&#xff0c;Bean A 依赖于 Bean B&#xff0c;而 Bean B 又依赖于 Bean A。这种依赖关系可能会导致初始化失败。Spring 提供了一种机制来解决这种循环依赖…...

AIGC时代的新风口!MCP协议引领未来无限可能

文章目录 一、引言二、MCP的定义与架构三、MCP的使用案例1. Cursor MCP Figma&#xff1a;工程化项目自动化2. Claude Desktop与本地文件系统交互3. 智能客服系统中的MCP应用 四、MCP的应用前景1. 更广泛的应用场景拓展2. 更高的性能要求和优化3. 更强的安全性和隐私保护措施…...

NO.81十六届蓝桥杯备战|数据结构-Trie树-字典树-前缀树|于是他错误的点名开始了|最大异或对 The XOR Largest Pair(C++)

字典树的概念 Trie树⼜叫字典树或前缀树&#xff0c;是⼀种能够快速插⼊和查询字符串的数据结构。它利⽤字符串的公共前缀&#xff0c;将字符串组织成⼀棵树形结构&#xff0c;从⽽⼤⼤提⾼了存储以及查找效率。 我们可以把字典树想象成⼀棵多叉树&#xff0c;每⼀条边代表⼀个…...

go语言应该如何学习

以下是学习Go语言的高效路径及关键技巧&#xff0c;结合多个优质来源整理而成&#xff0c;适合不同基础的学习者&#xff1a; 一、基础语法快速入门&#xff08;1-2周&#xff09; 1、环境搭建 下载安装Go SDK&#xff0c;配置GOPATH和GOROOT环境变量&#xff0c;推荐使用Go…...