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 的 v1
或 v2
版本,优先选择 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
。除非您定义自己的GraphiteConfig
和Clock
Bean,否则我们会提供自动配置的GraphiteConfig
和Clock
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
。除非您自己定义,否则系统会提供自动配置的JmxConfig
和Clock
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
可用,自动配置就能对所有可用的 ThreadPoolTaskExecutor
和 ThreadPoolTaskScheduler
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 | 请求方法(例如 GET 或 POST ) |
outcome | 根据响应的状态代码得出的请求结果。1xx 为 INFORMATIONAL (信息),2xx 为 SUCCESS (成功),3xx 为 REDIRECTION (驳回),4xx 为 CLIENT_ERROR (客户错误),5xx 为 SERVER_ERROR (服务器错误)。 |
status | 响应的 HTTP 状态代码(例如 200 或 500 ) |
uri | 如果可能,在变量替换之前的请求 URI 模板(例如,/api/person/{id} )。 |
要自定义标签,请提供一个实现 JerseyTagsProvider
的 @Bean
。
HTTP Client 度量指标
Spring Boot Actuator 管理 RestTemplate
、WebClient
和 RestClient
的工具。为此,你必须注入自动配置的构建器,并使用它来创建实例:
- 用于
RestTemplate
的RestTemplateBuilder
- 用于
WebClient
的WebClient.Builder
- 用于
RestClient
的RestClient.Builder
您还可以手动应用负责该工具的自定义器,即 ObservationRestTemplateCustomizer
、ObservationWebClientCustomizer
和 ObservationRestClientCustomizer
。
默认情况下,生成的度量指标名称为 http.client.requests
。你可以通过设置 management.observations.http.client.requests.name
属性来自定义名称。
有关生成的观察结果的更多信息,请参阅 Spring Framework 参考文档。
要在使用 RestTemplate
或 RestClient
时自定义标签,请提供一个从 org.springframework.http.client.observation
包中实现 ClientRequestObservationConvention
的 @Bean
。要在使用 WebClient
时自定义标签,请提供一个从 org.springframework.web.reactive.function.client
包中实现 ClientRequestObservationConvention
的 @Bean
。
相关文章:
Spring Boot 生产就绪中文文档-下
本文为官方文档直译版本。原文链接 由于篇幅较长,遂分两篇。上半部分中文文档 Spring Boot 生产就绪中文文档-下 度量标准入门受支持的监控系统AppOpticsAtlasDatadogDynatracev2 API自动配置手动配置 v1 API (旧版)与版本无关的设置 ElasticGangliaGraphiteHumioIn…...
DS|树结构及应用
题目一:DS树 -- 树的先根遍历(双亲转先序) 题目描述: 给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点 编写程序,输出该树…...
Java 读取超大excel文件
注意:此参考解决方案只是针对xlsx格式的excel文件! Maven <dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.2.0</version> </dependency>读取方式1…...
K8S中的job和CronJob
Job 介绍 Kubernetes jobs主要是针对短时和批量的工作负载。它是为了结束而运行的,而不是像deployment、replicasets、replication controllers和DaemonSets等其他对象那样持续运行。 示例 apiVersion: batch/v1 kind: Job metadata:name: pispec:template:spec:r…...
中国文化文物和旅游统计年鉴,数据含pdf、excel等格式,文本形式呈现,可预览数据
基本信息. 数据名称: 中国旅游统计年鉴 数据格式: pdf、xls不定 数据时间: 2012-2020年 数据几何类型: 文本 数据坐标系: —— 数据来源:文化和旅游部、网络公开数据 原名为《中国旅游统计年鉴》2020年后更名为《中国文化文物和旅游统计年鉴》ÿ…...
Java版企业电子招标采购系统源码——鸿鹄电子招投标系统的技术特点
在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…...
go语言语法基础
文章目录 前言一、输入和输出常用的字符串格式化符号 二、注释三、Go常用基本语言数据类型数字类型布尔类型字符类型变量与常量数组和切片数组切片 map类型创建map增删改查特别提醒 指针 四、运算符五、条件判断语句if系列switch六、循环语句for循环标准写法死循环while循环do …...
eclipse 和java环境的安装教程
安装 Eclipse 和配置 Java 环境是一个多步骤的过程,涉及到安装 Java Development Kit (JDK) 和 Eclipse IDE。以下是基本步骤: 安装 Java Development Kit (JDK) 下载 JDK: 访问 Oracle 官方网站(Oracle JDK)或者选择…...
Win11系统的优化方法参考文档(彻底优化策略)
目录 一、个性化-应用-关闭防火墙等的设置 二、任务栏优化设置 三、Win11开始菜单更改为Win10经典菜单 四、将Micresoft Store 从固定任务栏取消 五、电源性能优化 六、解决卡顿 七、卸载系统自带软件 八、任务管理器开机启动项的禁用 九、调整为最佳性能 十…...
Leetcode13-解密消息(2325)
1、题目 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下: 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐,形成对照表。 按照对照表 …...
二进制安装包安装Prometheus插件安装(mysql_exporter)
简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的,mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署,也可以通过容器形式部署,但为了数据收集的准确性,推荐二进制安装。 一,下载安…...
原生微信小程序如何动态修改svg图片颜色及尺寸、宽高(封装svgIcon组件)
最终效果 前言 动态设置Svg图片颜色就是修改Svg源码的path中的fill属性, 通过wx.getFileSystemManager().readFile读取.xlsx文件 把文件转成base64 封装svg-icon组件 1、在项目的components下新建svg-icon文件夹,新增base64.js文件 class Base64 {cons…...
Python从入门到网络爬虫(面向对象详解)
前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本…...
NPDP产品经理含金量高吗?难考吗?
NPDP的中文翻译为产品经理国际资格认证。NPDP考试起源于美国,由美国产品开发与管理协会(PDMA)发起。NPDP认证是集理论、方法与实践为一体的全方位知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。࿰…...
目标检测 YOLOv5 - 推理时的数据增强
目标检测 YOLOv5 - 推理时的数据增强 flyfish 版本 YOLOv5 6.2 参考地址 https://github.com/ultralytics/yolov5/issues/303在训练时可以使用数据增强,在推理阶段也可以使用数据增强 在测试使用数据增强有个名字叫做Test-Time Augmentation (TTA) 实际使用中使…...
篇二:springboot2.7 OAuth2 server使用jdbc存储RegisteredClient
上一篇 <<springboot 2.7 oauth server配置源码走读一>>中简单描述了oauth2 server的配置,其中使用了内存保存 RegisteredClient,本篇改用mysql存储。 db存储需要创建表,表结构应该是什么样的呢,从spring给我们封装好…...
卷积神经网络|导入图片
在学习卷积神经网络时,我们通常使用的就是公开的数据集,这里,我们不使用公开数据集,直接导入自己的图片数据,下面,就简单写个程序实现批量图片的导入。 import osfrom PIL import Imageimport numpy as np…...
关于unity的组件VerticalLayoutGroup刷新显示不正常的问题
先说明一下我是如何用到,有哪些处理的 用到这个组件基本上都是将列表进行排版操作的,竖着,或者横着,横着用HorizontalLayoutGroup 还有一个和这个组件搭配的组件叫ContentSizeFitter 先说我是怎么发现这个组件不好用的 //本地读取…...
wait 和 notify 这个为什么要在synchronized 代码块中?
一个工作七年的小伙伴,竟然不知道” wait”和“notify”为什么要在 Synchronized 代码块中 。 好吧,如果屏幕前的你也不知道,请在公屏上刷”不知道“。 对于这个问题,我们来看看普通人和高手的回答。 一、问题解析 1. wait 和 n…...
大白话说区块链和通证
1 区块链 简单地说,区块链其实就像是一个不可篡改的分布式数据库,该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上,每个节点都有自己的一个分布式数据库,也就是分布式账本。正常情况下,每个节…...
Jvm之垃圾收集器(个人见解仅供参考)
问:什么是垃圾收集算法中的分代收集理论? 答:分代收集理论是垃圾收集算法的一种思想,根据对象存活周期的不同将内存分为几块,一般将java堆分为新生代和老年代。这种理论使得我们可以根据各个年代的特点选择合适的垃圾收…...
Minitab 21软件安装包下载及安装教程
Minitab 21下载链接:https://docs.qq.com/doc/DUkNHZVhwTXhtTFla 1.选中下载好的安装包,鼠标右键解压到”Minitab 21“文件夹 2.选中”Setup.exe“,鼠标右击选择“以管理员身份运行” 3.点击“下一步” 4.点击“是” 5.点击“下一步” 6.勾选…...
Java版商城:Spring Cloud+SpringBoot b2b2c电子商务平台,多商家入驻、直播带货及免 费 小程序商城搭建
随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的…...
阿里云被拉入黑洞模式怎么办?该怎么换ip-速盾网络
被拉入黑洞模式(BGP黑洞路由)意味着所有进入目标IP的流量都会被丢弃,从而导致目标IP对外完全不可访问。这种情况通常发生在面对大规模DDoS攻击时,为了防止攻击流量对其他网络造成影响。如果你使用的是阿里云服务并遭受到这种攻击&…...
Android 13.0 recovery竖屏界面旋转为横屏
1.概述 在13.0系统项目定制化开发中,由于平板固定横屏显示,而如果recovery界面竖屏显示就觉得怪怪的,所以需要recovery页面横屏显示的功能, 所以今天就来解决这个问题 2.实现功能相关分析 Android的Recovery中,利用 bootable\recovery下的minui库作为基础,采用的是直接…...
异地环控设备如何远程维护?贝锐蒲公英解决远程互联难题
青岛某企业致力于孵化设备、养禽设备和养猪设备的研发、生产和服务,历经三十多年发展,目前已成长为行业主要的养殖装备及工程服务提供商,产品覆盖养殖产业链中绝大多数环节,涉及自动化设备、环控设备、整体解决方案等。 在实际应用…...
flutter 判断是否是web环境
代码如下 import package:flutter/foundation.dart show kIsWeb;void main() {if (kIsWeb) {print(Running on the web!);} else {print(Not running on the web!);} } 如果是使用 Platform.isAndroid 会报错 所以使用上面的方式...
视频智能分析/云存储平台EasyCVR接入海康SDK,通道名称未自动更新该如何解决?
视频监控GB28181平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能…...
后端开发——JDBC的学习(三)
本篇继续对JDBC进行总结: ①通过Service层与Dao层实现转账的练习; ②重点:由于每次使用连接就手动创建连接,用完后就销毁,这样会导致资源浪费,因此引入连接池,练习连接池的使用; …...
Redis 生产环境查找无过期时间的 key
在项目中,Redis 不应该被当作传统数据库来使用;储存大量没有过期时间的数据。如果储存大量无过期时间,而且无效的key的话;再加上 Redis 本身的过期策略没有被正确设置,就会大量占用内存。这样就会导致再多的内存资源也不够用。 情况大致是这样,项目中采用 Redis 二级存储…...
做asp动态网站制作流程/建站软件可以不通过网络建设吗
栈与队列就像一对兄弟一样,学习的时候可以一块学习。 栈的特点:先进后出 队列的特点:先进先出 一、头文件 栈的头文件 #include<stack> 队列的头文件 #include<queue> 二、定义 栈的定义:stack<TYPE> s; 队列…...
建设网站类型/东莞网络营销网络推广系统
lr_free_parameter() 在运行时删除动态参数,释放其缓冲区。 int lr_free_parameter(const char * param); 参数说明: Param:动态参数的名称。 lr_free_parameter函数释放在运行时为指定参数分…...
国外那些网站做展厅比较好/网站提交入口
方差分析针对因子型解释变量(也即分组变量)进行建模,而回归分析一般针对连续型解释变量进行建模。方差分析基于贝叶斯概率理论判断组间差异,而回归分析则可以基于最大似然法推断模型参数。这两种分析是很多数理统计例如组间差异分析(Metastats、Adonis、…...
贵阳网站设计与开发怎么做/服装店营销策划方案
为什么80%的码农都做不了架构师?>>> 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧。 对象反射库、调试工…...
潮州市住房和城乡建设局网站/市场营销方案
在有些情况下,我们不希望自己的shell脚本在运行时刻被中断,比如说我们写得shell脚 本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份, 我 们可不希望用户使用ctrlC之类便进入到shell状…...
用rp怎样做网站/如何免费发布广告
HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这 些新特性。 HTML5 新增的语义化标…...