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

Spring Boot 生产就绪中文文档-下

本文为官方文档直译版本。原文链接
由于篇幅较长,遂分两篇。上半部分中文文档

Spring Boot 生产就绪中文文档-下

  • 度量标准
    • 入门
    • 受支持的监控系统
      • AppOptics
      • Atlas
      • Datadog
      • Dynatrace
        • v2 API
          • 自动配置
          • 手动配置
        • v1 API (旧版)
        • 与版本无关的设置
      • Elastic
      • Ganglia
      • Graphite
      • Humio
      • Influx
      • JMX
      • KairosDB
      • New Relic
      • OpenTelemetry
      • Prometheus
      • SignalFx
      • Simple
      • Stackdriver
      • StatsD
      • Wavefront
    • 支持的度量标准和度量器
      • JVM 度量标准
      • 系统度量标准
      • 应用启动度量标准
      • Logger 度量标准
      • 任务执行和调度度量标准
      • JMS 度量标准
      • Spring MVC 度量标准
      • Spring WebFlux 度量标准
      • Jersey Server 度量标准
      • HTTP Client 度量指标

度量标准

Spring Boot Actuator 为 Micrometer 提供了依赖关系管理和自动配置功能,Micrometer 是一个应用程序度量门面,支持众多监控系统,包括

  • AppOptics
  • Atlas
  • Datadog
  • Dynatrace
  • Elastic
  • Ganglia
  • Graphite
  • Humio
  • Influx
  • JMX
  • KairosDB
  • New Relic
  • OpenTelemetry
  • Prometheus
  • SignalFx
  • Simple (in-memory)
  • Stackdriver
  • StatsD
  • Wavefront

要了解 Micrometer 功能的更多信息,请参阅参考文档,特别是概念部分。

入门

Spring Boot 会自动配置一个复合 MeterRegistry,并为它在类路径上找到的每个支持的实现添加一个注册表。运行时类路径中对 micrometer-registry-{system} 的依赖足以让 Spring Boot 配置注册表。
大多数注册表都有共同的功能。例如,即使 Micrometer 注册表实现位于类路径上,您也可以禁用某个注册表。下面的示例禁用了 Datadog:

management:datadog:metrics:export:enabled: false

您也可以禁用所有注册表,除非注册表特定属性另有说明,如下例所示:

management:defaults:metrics:export:enabled: false

Spring Boot 还会将任何自动配置的注册表添加到 Metrics 类的全局静态复合注册表中,除非您明确告诉它不要这样做:

management:metrics:use-global-registry: false

您可以注册任意数量的 MeterRegistryCustomizer Bean 来进一步配置注册表,例如在向注册表注册任何仪表之前应用通用标记:

import io.micrometer.core.instrument.MeterRegistry;import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {@Beanpublic MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return (registry) -> registry.config().commonTags("region", "us-east-1");}}

您可以通过更具体的通用类型,对特定的注册表实施进行自定义:

import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.graphite.GraphiteMeterRegistry;import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {@Beanpublic MeterRegistryCustomizer<GraphiteMeterRegistry> graphiteMetricsNamingConvention() {return (registry) -> registry.config().namingConvention(this::name);}private String name(String name, Meter.Type type, String baseUnit) {return ...}}

Spring Boot 还配置了内置仪器,你可以通过配置或专用注释标记来控制这些仪器。

受支持的监控系统

本节简要介绍每个支持的监控系统。

AppOptics

默认情况下,AppOptics 注册会定期将指标推送到 api.appoptics.com/v1/measurements。要将指标导出到 SaaS AppOptics,必须提供您的 API 标记:

management:appoptics:metrics:export:api-token: "YOUR_TOKEN"

Atlas

默认情况下,度量指标会导出到本地计算机上运行的 Atlas。您可以提供 Atlas 服务器的位置:

management:atlas:metrics:export:uri: "https://atlas.example.com:7101/api/v1/publish"

Datadog

Datadog 注册表会定期向 datadoghq 推送指标。要将指标导出到 Datadog,您必须提供 API 密钥:

management:datadog:metrics:export:api-key: "YOUR_KEY"

如果额外提供应用密钥(可选),则还会导出仪表描述、类型和基本单位等元数据:

management:datadog:metrics:export:api-key: "YOUR_API_KEY"application-key: "YOUR_APPLICATION_KEY"

默认情况下,度量指标发送到 Datadog 美国站点 (api.datadoghq.com)。如果您的 Datadog 项目托管在其他站点上,或者您需要通过代理发送度量指标,请相应配置 URI:

management:datadog:metrics:export:uri: "https://api.datadoghq.eu"

您还可以更改向 Datadog 发送指标的时间间隔:

management:datadog:metrics:export:step: "30s"

Dynatrace

Dynatrace 提供两个指标摄取 API,这两个 API 都是为 Micrometer 实现的。您可在此处找到有关 Micrometer 指标摄取的 Dynatrace 文档。v1 名称空间中的配置属性仅在导出至 Timeseries v1 API 时适用。v2 名称空间中的配置属性仅适用于导出至 Metrics v2 API。请注意,此集成一次只能导出到 API 的 v1v2 版本,优先选择 v2。如果在 v1 名称空间中设置了 device-id(v1 需要,但 v2 中不使用),则会向 v1 端点导出度量值。否则,将假定使用 v2 版本。

v2 API

您可以通过两种方式使用 v2 API。

自动配置

Dynatrace 自动配置适用于由 OneAgent 或 Dynatrace Operator for Kubernetes 监控的主机。
Local OneAgent: 如果主机上运行 OneAgent,指标会自动导出到本地 OneAgent 摄取端点。摄取端点会将指标转发到 Dynatrace 后台。
Dynatrace Kubernetes Operator: 在安装了 Dynatrace 操作员的 Kubernetes 中运行时,注册表会自动从操作员处获取端点 URI 和 API 标记。
这是默认行为,除了依赖于 io.micrometer:micrometer-registry-dynatrace 之外,无需其他特殊设置。

手动配置

如果没有自动配置功能,则需要 Metrics v2 API 的端点和 API 令牌。API 令牌必须设置有 “摄取度量”(metrics.ingest)权限。我们建议将令牌的范围限制在这一个权限内。必须确保端点 URI 包含路径(例如,/api/v2/metrics/ingest):
Metrics API v2 ingest 端点的 URL 根据部署选项的不同而不同:

  • SaaS: https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingest
  • Managed deployments: https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest

下面的示例使用example环境 ID 配置指标导出:

management:dynatrace:metrics:export:uri: "https://example.live.dynatrace.com/api/v2/metrics/ingest"api-token: "YOUR_TOKEN"

使用 Dynatrace v2 API 时,可使用以下可选功能(更多详细信息请参阅 Dynatrace 文档):

  • 度量键前缀: 设置所有导出度量键的前缀。
  • 使用 Dynatrace 元数据丰富度量: 如果 OneAgent 或 Dynatrace 操作员正在运行,则使用附加元数据(例如,有关主机、进程或 pod 的元数据)丰富度量。
  • 默认维度: 指定添加到所有导出指标的键值对。如果使用 Micrometer 指定了具有相同键值的标签,它们会覆盖默认维度。
  • 使用 Dynatrace 摘要工具: 在某些情况下,Micrometer Dynatrace 注册表创建的度量被拒绝。在 Micrometer 1.9.x 中,通过引入特定于 Dynatrace 的摘要工具解决了这一问题。只有在从 Micrometer 1.8.x 迁移到 1.9.x 时遇到问题时才可使用。
  • 导出仪表元数据: 从 Micrometer 1.12.0 开始,Dynatrace 输出程序还将输出仪表元数据,如默认单位和描述。使用 export-meter-metadata 切换按钮可关闭此功能。

可以不指定 URI 和 API 标记,如下例所示。在这种情况下,将使用自动配置的端点:

management:dynatrace:metrics:export:# Specify uri and api-token here if not using the local OneAgent endpoint.v2:metric-key-prefix: "your.key.prefix"enrich-with-dynatrace-metadata: truedefault-dimensions:key1: "value1"key2: "value2"use-dynatrace-summary-instruments: true # (default: true)export-meter-metadata: true             # (default: true)
v1 API (旧版)

Dynatrace v1 API 指标注册中心通过使用 Timeseries v1 API 定期向配置的 URI 推送指标。为了与现有设置向后兼容,当设置了 device-id(v1 需要,但 v2 中不使用)时,指标会导出到 Timeseries v1 端点。要向 Dynatrace 导出指标,必须提供 API 标记、设备 ID 和 URI:

management:dynatrace:metrics:export:uri: "https://{your-environment-id}.live.dynatrace.com"api-token: "YOUR_TOKEN"v1:device-id: "YOUR_DEVICE_ID"

对于 v1 应用程序接口,您必须指定不含路径的基础环境 URI,因为 v1 端点路径会自动添加。

与版本无关的设置

除了 API 端点和令牌,您还可以更改向 Dynatrace 发送指标的时间间隔。默认导出间隔为 60 秒。下面的示例将导出间隔设置为 30 秒:

management:dynatrace:metrics:export:step: "30s"

有关如何为 Micrometer 设置 Dynatrace 输出程序的详细信息,请参阅 Micrometer 文档和 Dynatrace 文档。

Elastic

默认情况下,度量指标会导出到本地计算机上运行的 Elastic 服务器。您可以使用以下属性提供要使用的 Elastic 服务器的位置:

management:elastic:metrics:export:host: "https://elastic.example.com:8086"

Ganglia

默认情况下,度量指标会导出到本地计算机上运行的 Ganglia。您可以提供 Ganglia 服务器主机和端口,如下例所示:

management:ganglia:metrics:export:host: "ganglia.example.com"port: 9649

Graphite

默认情况下,度量指标会导出到本地计算机上运行的 Graphite。您可以提供 Graphite 服务器主机和端口,如下例所示:

management:graphite:metrics:export:host: "graphite.example.com"port: 9004

Micrometer 提供一个默认的 HierarchicalNameMapper,用于管理如何将仪表 ID 映射到平面层次名称。

要控制这种行为,请定义您的 GraphiteMeterRegistry 并提供您自己的 HierarchicalNameMapper。除非您定义自己的 GraphiteConfigClock Bean,否则我们会提供自动配置的 GraphiteConfigClock Bean:

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.HierarchicalNameMapper;
import io.micrometer.graphite.GraphiteConfig;
import io.micrometer.graphite.GraphiteMeterRegistry;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration(proxyBeanMethods = false)
public class MyGraphiteConfiguration {@Beanpublic GraphiteMeterRegistry graphiteMeterRegistry(GraphiteConfig config, Clock clock) {return new GraphiteMeterRegistry(config, clock, this::toHierarchicalName);}private String toHierarchicalName(Meter.Id id, NamingConvention convention) {return ...}}

Humio

默认情况下,Humio 注册表会定期将指标推送到 cloud.humio.com。要将指标导出到 SaaS Humio,必须提供 API 令牌:

management:humio:metrics:export:api-token: "YOUR_TOKEN"

您还应该配置一个或多个标记,以标识要推送指标的数据源:

management:humio:metrics:export:tags:alpha: "a"bravo: "b"

Influx

默认情况下,度量指标会以默认配置导出到本地计算机上运行的 Influx v1 实例。要将指标导出到 InfluxDB v2,请配置用于写入指标的 org、bucket 和身份验证令牌。您可以使用以下方式提供要使用的 Influx 服务器位置:

management:influx:metrics:export:uri: "https://influx.example.com:8086"

JMX

Micrometer 为 JMX 提供了一个分层映射,主要是作为在本地查看度量的一种廉价且便携的方式。默认情况下,度量指标会导出到 metrics JMX 域。您可以通过使用

management:jmx:metrics:export:domain: "com.example.app.metrics"

Micrometer 提供一个默认的 HierarchicalNameMapper,用于管理如何将仪表 ID 映射到平面层次名称。

要控制这种行为,请定义您的 JmxMeterRegistry 并提供您自己的 HierarchicalNameMapper。除非您自己定义,否则系统会提供自动配置的 JmxConfigClock Bean:

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.HierarchicalNameMapper;
import io.micrometer.jmx.JmxConfig;
import io.micrometer.jmx.JmxMeterRegistry;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration(proxyBeanMethods = false)
public class MyJmxConfiguration {@Beanpublic JmxMeterRegistry jmxMeterRegistry(JmxConfig config, Clock clock) {return new JmxMeterRegistry(config, clock, this::toHierarchicalName);}private String toHierarchicalName(Meter.Id id, NamingConvention convention) {return ...}}

KairosDB

默认情况下,度量指标会导出到本地计算机上运行的 KairosDB。您可以使用以下命令提供要使用的 KairosDB 服务器位置:

management:kairos:metrics:export:uri: "https://kairosdb.example.com:8080/api/v1/datapoints"

New Relic

New Relic 注册表会定期向 New Relic 推送指标。要将指标导出到 New Relic,您必须提供 API 密钥和账户 ID:

management:newrelic:metrics:export:api-key: "YOUR_KEY"account-id: "YOUR_ACCOUNT_ID"

您还可以更改向 New Relic 发送指标的时间间隔:

management:newrelic:metrics:export:step: "30s"

默认情况下,度量指标通过 REST 调用发布,但如果类路径上有 Java Agent API,也可以使用它:

management:newrelic:metrics:export:client-provider-type: "insights-agent"

最后,您可以通过定义自己的 NewRelicClientProvider Bean 来实现完全控制。

OpenTelemetry

默认情况下,度量指标会导出到本地计算机上运行的 OpenTelemetry。您可以使用以下方式提供要使用的 OpenTelemetry 指标端点的位置:

management:otlp:metrics:export:url: "https://otlp.example.com:4318/v1/metrics"

Prometheus

Prometheus 希望刮取或轮询单个应用程序实例的指标。Spring Boot 在 /actuator/prometheus 中提供了一个执行器端点,用于以适当的格式呈现 Prometheus scrape。

默认情况下,端点不可用,必须公开。更多详情,请参阅 “暴露端点”。

以下示例将 scrape_config 添加到 prometheus.yml 中:

scrape_configs:- job_name: "spring"metrics_path: "/actuator/prometheus"static_configs:- targets: ["HOST:PORT"]

还支持 Prometheus Exemplars。要启用此功能,必须有一个 SpanContextSupplier Bean。如果使用 Micrometer Tracing,则会自动为您配置,但您也可以根据需要创建自己的Bean。请查看 Prometheus 文档,因为该功能需要在 Prometheus 端明确启用,而且只有 OpenMetrics 格式才支持该功能。
对于可能存在时间不够长、无法进行刮擦的短暂作业或批处理作业,可以使用 Prometheus Pushgateway 支持将指标暴露给 Prometheus。要启用 Prometheus Pushgateway 支持,请在项目中添加以下依赖项:

<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_pushgateway</artifactId>
</dependency>

当类路径上存在 Prometheus Pushgateway 依赖关系且 management.prometheus.metrics.export.pushgateway.enabled 属性设置为 true 时,将自动配置 PrometheusPushGatewayManager Bean。它会管理将度量指标推送到 Prometheus Pushgateway 的过程。
您可以使用 management.prometheus.metrics.export.pushgateway 下的属性来调整 PrometheusPushGatewayManager。对于高级配置,您还可以提供自己的 PrometheusPushGatewayManager Bean。

SignalFx

SignalFx 注册表会定期向 SignalFx 推送指标。要将指标导出到 SignalFx,必须提供访问令牌:

management:signalfx:metrics:export:access-token: "YOUR_ACCESS_TOKEN"

还可以更改向 SignalFx 发送指标的时间间隔:

management:signalfx:metrics:export:step: "30s"

Simple

Micrometer 随附一个简单的内存后端,如果没有配置其他注册表,该后端会自动用作备用。这样你就能看到度量端点收集了哪些度量。
一旦你使用了其他可用的后端,内存后端就会自动禁用。您也可以显式禁用它:

management:simple:metrics:export:enabled: false

Stackdriver

Stackdriver 注册表会定期向 Stackdriver 推送指标。要将指标导出到 SaaS Stackdriver,必须提供 Google Cloud 项目 ID:

management:stackdriver:metrics:export:project-id: "my-project"

您还可以更改向 Stackdriver 发送指标的时间间隔:

management:stackdriver:metrics:export:step: "30s"

StatsD

StatsD 注册表会急切地通过 UDP 向 StatsD 代理推送指标。默认情况下,指标会导出到本地机器上运行的 StatsD 代理。你可以使用以下命令提供要使用的 StatsD 代理主机、端口和协议:

management:statsd:metrics:export:host: "statsd.example.com"port: 9125protocol: "udp"

您还可以更改要使用的 StatsD 线路协议(默认为 Datadog):

management:statsd:metrics:export:flavor: "etsy"

Wavefront

Wavefront 注册表会定期向 Wavefront 推送指标。如果直接向 Wavefront 导出度量,则必须提供 API 令牌:

management:wavefront:api-token: "YOUR_API_TOKEN"

或者,您也可以在环境中使用 Wavefront sidecar 或内部代理将指标数据转发到 Wavefront API 主机:

management:wavefront:uri: "proxy://localhost:2878"

如果将指标发布到 Wavefront 代理(如 Wavefront 文档所述),主机必须是 proxy://HOST:PORT 格式。

您还可以更改向 Wavefront 发送指标的时间间隔:

management:wavefront:metrics:export:step: "30s"

支持的度量标准和度量器

Spring Boot 可为各种技术提供自动度量注册。在大多数情况下,默认值提供了合理的度量,可以发布到任何支持的监控系统。

JVM 度量标准

自动配置通过使用核心 Micrometer 类来启用 JVM 度量。JVM 指标以 jvm. meter 名称发布。
提供以下 JVM 指标:

  • 各种内存和缓冲池详情
  • 与垃圾回收有关的统计
  • 线程利用率
  • 加载和卸载的类的数量
  • JVM 版本信息
  • JIT 编译时间

系统度量标准

自动配置通过使用核心 Micrometer 类实现系统度量。系统指标以 system.process.disk.meter 名称发布。
提供以下系统指标:

  • CPU 指标
  • 文件描述符指标
  • 正常运行时间指标(既包括应用程序的运行时间,也包括绝对启动时间的固定指标)
  • 可用磁盘空间

应用启动度量标准

自动配置暴露了应用程序启动时间度量标准:

  • application.started.time:启动应用程序所需的时间。
  • application.ready.time:应用程序准备好为请求提供服务所用的时间。

度量指标用应用程序类的全称标记。

Logger 度量标准

自动配置可启用 Logback 和 Log4J2 的事件度量。详情发布在 log4j2.events. logback.events.meter 名称下。

任务执行和调度度量标准

只要底层 ThreadPoolExecutor 可用,自动配置就能对所有可用的 ThreadPoolTaskExecutorThreadPoolTaskScheduler Bean 进行检测。度量指标由执行器名称标记,而执行器名称则来自于 Bean 名称。

JMS 度量标准

自动配置可对所有可用的 JmsTemplate Bean 和 @JmsListener 注释方法进行检测。这将分别产生 “jms.message.publish” 和 "jms.message.process"指标。有关生成的观测值的更多信息,请参阅 Spring Framework 参考文档。

Spring MVC 度量标准

自动配置可对 Spring MVC 控制器和功能处理程序处理的所有请求进行监测。默认情况下,生成的指标名称为 http.server.requests。您可以通过设置 management.observations.http.server.requests.name 属性来自定义名称。
有关生成的观测值的更多信息,请参阅 Spring Framework 参考文档。
要添加默认标记,请提供一个从 org.springframework.http.server.observation 包中扩展 DefaultServerRequestObservationConvention@Bean。要替换默认标记,请提供一个实现 ServerRequestObservationConvention@Bean

在某些情况下,网络控制器处理的异常不会被记录为请求度量标记。应用程序可以选择将已处理的异常设置为请求属性,从而记录异常。

默认情况下,所有请求都会被处理。要自定义过滤器,请提供一个实现 FilterRegistrationBean<ServerHttpObservationFilter>@Bean

Spring WebFlux 度量标准

自动配置可对 Spring WebFlux 控制器和功能处理程序处理的所有请求进行检测。默认情况下,生成的指标名称为 http.server.requests。您可以通过设置 management.observations.http.server.requests.name 属性来自定义名称。
有关生成的观测值的更多信息,请参阅 Spring Framework 参考文档。
要添加默认标记,请提供一个从 org.springframework.http.server.reactive.observation 包中扩展 DefaultServerRequestObservationConvention@Bean。要替换默认标记,请提供一个实现 ServerRequestObservationConvention@Bean

在某些情况下,控制器和处理函数中处理的异常不会被记录为请求度量标记。应用程序可以选择将已处理的异常设置为请求属性,从而记录异常。

Jersey Server 度量标准

自动配置可对 Jersey JAX-RS 实现处理的所有请求进行检测。默认情况下,生成的指标名称为 http.server.requests。您可以通过设置 management.observations.http.server.requests.name 属性来自定义名称。
默认情况下,Jersey 服务器指标会标记以下信息:

Tag描述
exception处理请求时抛出的任何异常的简单类名。
method请求方法(例如 GETPOST
outcome根据响应的状态代码得出的请求结果。1xx 为 INFORMATIONAL(信息),2xx 为 SUCCESS(成功),3xx 为 REDIRECTION(驳回),4xx 为 CLIENT_ERROR(客户错误),5xx 为 SERVER_ERROR(服务器错误)。
status响应的 HTTP 状态代码(例如 200500
uri如果可能,在变量替换之前的请求 URI 模板(例如,/api/person/{id})。

要自定义标签,请提供一个实现 JerseyTagsProvider@Bean

HTTP Client 度量指标

Spring Boot Actuator 管理 RestTemplateWebClientRestClient 的工具。为此,你必须注入自动配置的构建器,并使用它来创建实例:

  • 用于 RestTemplateRestTemplateBuilder
  • 用于 WebClientWebClient.Builder
  • 用于 RestClientRestClient.Builder

您还可以手动应用负责该工具的自定义器,即 ObservationRestTemplateCustomizerObservationWebClientCustomizerObservationRestClientCustomizer
默认情况下,生成的度量指标名称为 http.client.requests。你可以通过设置 management.observations.http.client.requests.name 属性来自定义名称。
有关生成的观察结果的更多信息,请参阅 Spring Framework 参考文档。
要在使用 RestTemplateRestClient 时自定义标签,请提供一个从 org.springframework.http.client.observation 包中实现 ClientRequestObservationConvention@Bean。要在使用 WebClient 时自定义标签,请提供一个从 org.springframework.web.reactive.function.client 包中实现 ClientRequestObservationConvention@Bean

相关文章:

Spring Boot 生产就绪中文文档-下

本文为官方文档直译版本。原文链接 由于篇幅较长&#xff0c;遂分两篇。上半部分中文文档 Spring Boot 生产就绪中文文档-下 度量标准入门受支持的监控系统AppOpticsAtlasDatadogDynatracev2 API自动配置手动配置 v1 API (旧版)与版本无关的设置 ElasticGangliaGraphiteHumioIn…...

DS|树结构及应用

题目一&#xff1a;DS树 -- 树的先根遍历&#xff08;双亲转先序&#xff09; 题目描述&#xff1a; 给出一棵树的双亲表示法结果&#xff0c;用一个二维数组表示&#xff0c;位置下标从0开始&#xff0c;如果双亲位置为-1则表示该结点为根结点 编写程序&#xff0c;输出该树…...

Java 读取超大excel文件

注意&#xff1a;此参考解决方案只是针对xlsx格式的excel文件&#xff01; Maven <dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.2.0</version> </dependency>读取方式1…...

K8S中的job和CronJob

Job 介绍 Kubernetes jobs主要是针对短时和批量的工作负载。它是为了结束而运行的&#xff0c;而不是像deployment、replicasets、replication controllers和DaemonSets等其他对象那样持续运行。 示例 apiVersion: batch/v1 kind: Job metadata:name: pispec:template:spec:r…...

中国文化文物和旅游统计年鉴,数据含pdf、excel等格式,文本形式呈现,可预览数据

基本信息. 数据名称: 中国旅游统计年鉴 数据格式: pdf、xls不定 数据时间: 2012-2020年 数据几何类型: 文本 数据坐标系: —— 数据来源&#xff1a;文化和旅游部、网络公开数据 原名为《中国旅游统计年鉴》2020年后更名为《中国文化文物和旅游统计年鉴》&#xff…...

Java版企业电子招标采购系统源码——鸿鹄电子招投标系统的技术特点

在数字化时代&#xff0c;采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…...

go语言语法基础

文章目录 前言一、输入和输出常用的字符串格式化符号 二、注释三、Go常用基本语言数据类型数字类型布尔类型字符类型变量与常量数组和切片数组切片 map类型创建map增删改查特别提醒 指针 四、运算符五、条件判断语句if系列switch六、循环语句for循环标准写法死循环while循环do …...

eclipse 和java环境的安装教程

安装 Eclipse 和配置 Java 环境是一个多步骤的过程&#xff0c;涉及到安装 Java Development Kit (JDK) 和 Eclipse IDE。以下是基本步骤&#xff1a; 安装 Java Development Kit (JDK) 下载 JDK&#xff1a; 访问 Oracle 官方网站&#xff08;Oracle JDK&#xff09;或者选择…...

Win11系统的优化方法参考文档(彻底优化策略)

目录 一、个性化-应用-关闭防火墙等的设置 二、任务栏优化设置 三、Win11开始菜单更改为Win10经典菜单 四、将Micresoft Store 从固定任务栏取消 五、电源性能优化 六、解决卡顿 七、卸载系统自带软件 八、任务管理器开机启动项的禁用 九、调整为最佳性能 十…...

Leetcode13-解密消息(2325)

1、题目 给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下&#xff1a; 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐&#xff0c;形成对照表。 按照对照表 …...

二进制安装包安装Prometheus插件安装(mysql_exporter)

简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的&#xff0c;mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署&#xff0c;也可以通过容器形式部署&#xff0c;但为了数据收集的准确性&#xff0c;推荐二进制安装。 一&#xff0c;下载安…...

原生微信小程序如何动态修改svg图片颜色及尺寸、宽高(封装svgIcon组件)

最终效果 前言 动态设置Svg图片颜色就是修改Svg源码的path中的fill属性&#xff0c; 通过wx.getFileSystemManager().readFile读取.xlsx文件 把文件转成base64 封装svg-icon组件 1、在项目的components下新建svg-icon文件夹&#xff0c;新增base64.js文件 class Base64 {cons…...

Python从入门到网络爬虫(面向对象详解)

前言 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本…...

NPDP产品经理含金量高吗?难考吗?

NPDP的中文翻译为产品经理国际资格认证。NPDP考试起源于美国&#xff0c;由美国产品开发与管理协会&#xff08;PDMA&#xff09;发起。NPDP认证是集理论、方法与实践为一体的全方位知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。&#xff0…...

目标检测 YOLOv5 - 推理时的数据增强

目标检测 YOLOv5 - 推理时的数据增强 flyfish 版本 YOLOv5 6.2 参考地址 https://github.com/ultralytics/yolov5/issues/303在训练时可以使用数据增强&#xff0c;在推理阶段也可以使用数据增强 在测试使用数据增强有个名字叫做Test-Time Augmentation (TTA) 实际使用中使…...

篇二:springboot2.7 OAuth2 server使用jdbc存储RegisteredClient

上一篇 <<springboot 2.7 oauth server配置源码走读一>>中简单描述了oauth2 server的配置&#xff0c;其中使用了内存保存 RegisteredClient&#xff0c;本篇改用mysql存储。 db存储需要创建表&#xff0c;表结构应该是什么样的呢&#xff0c;从spring给我们封装好…...

卷积神经网络|导入图片

在学习卷积神经网络时&#xff0c;我们通常使用的就是公开的数据集&#xff0c;这里&#xff0c;我们不使用公开数据集&#xff0c;直接导入自己的图片数据&#xff0c;下面&#xff0c;就简单写个程序实现批量图片的导入。 import osfrom PIL import Imageimport numpy as np…...

关于unity的组件VerticalLayoutGroup刷新显示不正常的问题

先说明一下我是如何用到&#xff0c;有哪些处理的 用到这个组件基本上都是将列表进行排版操作的&#xff0c;竖着&#xff0c;或者横着&#xff0c;横着用HorizontalLayoutGroup 还有一个和这个组件搭配的组件叫ContentSizeFitter 先说我是怎么发现这个组件不好用的 //本地读取…...

wait 和 notify 这个为什么要在synchronized 代码块中?

一个工作七年的小伙伴&#xff0c;竟然不知道” wait”和“notify”为什么要在 Synchronized 代码块中 。 好吧&#xff0c;如果屏幕前的你也不知道&#xff0c;请在公屏上刷”不知道“。 对于这个问题&#xff0c;我们来看看普通人和高手的回答。 一、问题解析 1. wait 和 n…...

大白话说区块链和通证

1 区块链 简单地说&#xff0c;区块链其实就像是一个不可篡改的分布式数据库&#xff0c;该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上&#xff0c;每个节点都有自己的一个分布式数据库&#xff0c;也就是分布式账本。正常情况下&#xff0c;每个节…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...