Apache Commons CLI 入门教程:轻松解析命令行参数
文章目录
- Apache Commons CLI 入门教程:轻松解析命令行参数
- 一、什么是 Commons CLI?
- 二、为什么选择 Commons CLI?
- 三、快速开始
- 1. 添加依赖
- 2. 基础示例
- 3. 运行示例
- 1. 在Idea中运行
- 2. 命令行中运行
- 3. 使用 Maven/Gradle 运行(推荐)
- 4. 使用可运行jar运行
- 1. 配置pom.xml
- 2. 执行打包任务
- 3. 查看生成的jar文件
- 4. 运行jar文件
- 四、核心概念详解
- 1. 选项定义
- 2. 选项类型
- 3. 参数解析
- 4. 帮助信息
- 五、实战案例
- 1. 文件处理工具
- 2. 配置加载工具
- 六、最佳实践
- 七、常见问题解答
- 八、总结
Apache Commons CLI 入门教程:轻松解析命令行参数
一、什么是 Commons CLI?
Apache Commons CLI 是一个简单易用的 Java 库,专门用于解析命令行参数。当我们需要开发命令行工具或应用程序时,它可以帮助我们:
- 定义程序接受的参数格式
- 自动解析用户输入的命令行参数
- 生成标准化的帮助信息
- 验证参数的正确性
二、为什么选择 Commons CLI?
相比自己编写参数解析逻辑,使用 Commons CLI 有以下优势:
- 标准化:遵循 Unix/Linux 命令行工具的标准惯例
- 功能完善:支持长短选项、必选/可选参数、参数分组等
- 易用性:API 设计直观,学习曲线平缓
- 健壮性:经过广泛测试,能处理各种边界情况
三、快速开始
1. 添加依赖
首先需要在项目中添加 Commons CLI 的依赖:
Maven 项目:
<dependency><groupId>commons-cli</groupId><artifactId>commons-cli</artifactId><version>1.9.0</version>
</dependency>
Gradle 项目:
implementation 'commons-cli:commons-cli:1.9.0'
上述依赖中的版本号
1.9.0
是当前最新版本,以下代码均以当前版本为准。如果您需要在生产环境使用,请及时更新为最新版本。
2. 基础示例
让我们从一个最简单的例子开始:
package org.hbin.cli;import org.apache.commons.cli.*;public class GreetApp {public static void main(String[] args) {// 1. 创建选项定义Options options = new Options();options.addOption("n", "name", true, "指定您的名字");// 2. 创建解析器CommandLineParser parser = new DefaultParser();HelpFormatter formatter = new HelpFormatter();try {// 3. 解析参数CommandLine cmd = parser.parse(options, args);// 4. 处理参数if (cmd.hasOption("n")) {String name = cmd.getOptionValue("n");System.out.println("你好, " + name + "!");} else {System.out.println("你好, 世界!");}} catch (ParseException e) {System.err.println("参数错误: " + e.getMessage());formatter.printHelp("greet", options);System.exit(1);}}
}
3. 运行示例
1. 在Idea中运行
2. 命令行中运行
> java org.hbin.cli.GreetApp -n Haley
注意,直接运行上述命令可能会报错 java.lang.NoClassDefFoundError
,如下图:
这是因为运行时classpath中缺少Commons CLI的jar文件,需要指定其路径。
> java -cp .;%MAVEN_HOME%\repo\commons-cli\commons-cli\1.9.0\commons-cli-1.9.0.jar org.hbin.cli.GreetApp -n Haley
3. 使用 Maven/Gradle 运行(推荐)
如果是Maven项目:
mvn compile exec:java -Dexec.mainClass="org.hbin.cli.GreetApp" -Dexec.args="-n Haley"
如果是Gradle项目:
gradle run --args="-n Haley"
4. 使用可运行jar运行
上述代码也可以使用Maven Assembly Plugin制作成一个可运行jar,然后再运行。步骤如下:
1. 配置pom.xml
<build><plugins><!-- 配置 maven-assembly-plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><archive><manifest><!-- 指定主类 --><mainClass>org.hbin.cli.GreetApp</mainClass></manifest></archive><descriptorRefs><!-- 使用预定义的 jar-with-dependencies 描述符 --><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>
2. 执行打包任务
双击 maven 面板中的 package 执行打包或使用命令行打包:mvn clean package
。
3. 查看生成的jar文件
打包完成后,在项目的 target 目录下会生成两个 Jar 文件:
- CliExample-1.0-SNAPSHOT.jar - 不包含依赖的基本 Jar
- CliExample-1.0-SNAPSHOT-jar-with-dependencies.jar - 包含所有依赖的可运行 Jar
4. 运行jar文件
java -jar target/CliExample-1.0-SNAPSHOT-jar-with-dependencies.jar -n Haley
四、核心概念详解
1. 选项定义
Commons CLI 使用 Options
类来定义程序接受的参数:
Options options = new Options();// 简单选项
options.addOption("h", "help", false, "显示帮助信息");// 带参数的选项
options.addOption("n", "name", true, "指定输入名称");// 使用构建器模式创建复杂选项
options.addOption(Option.builder("n").longOpt("name").hasArg().argName("NAME").desc("指定名称").build());
2. 选项类型
类型 | 示例 | 说明 |
---|---|---|
无参选项 | -h , --help | 只表示一个开关状态 |
带参选项 | -n Haley | 需要接收一个参数 |
可选参数 | -d [debugLevel] | 参数可有可无 |
多值选项 | -Dkey1=value1 -Dkey2=value2 | 可以接收多个键值对 |
3. 参数解析
使用 DefaultParser
解析命令行参数:
CommandLineParser parser = new DefaultParser();
try {CommandLine cmd = parser.parse(options, args);// 检查选项是否存在if (cmd.hasOption("h")) {// 处理帮助选项}// 获取选项值String name = cmd.getOptionValue("n");
} catch (ParseException e) {// 处理解析错误
}
4. 帮助信息
HelpFormatter
可以生成标准化的帮助信息:
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("greet", options, true);
输出示例:
五、实战案例
1. 文件处理工具
package org.hbin.cli;import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;public class FileProcessor {public static void main(String[] args) {Options options = new Options();// 必选输入文件options.addOption(Option.builder("i").longOpt("input").required().hasArg().desc("输入文件路径(必选)").build());// 可选输出文件options.addOption(Option.builder("o").longOpt("output").hasArg().desc("输出文件路径").build());// 详细模式options.addOption("v", "verbose", false, "显示详细日志");CommandLineParser parser = new DefaultParser();HelpFormatter formatter = new HelpFormatter();try {CommandLine cmd = parser.parse(options, args);String inputFile = cmd.getOptionValue("i");System.out.println("处理文件: " + inputFile);if (cmd.hasOption("o")) {String outputFile = cmd.getOptionValue("o");System.out.println("输出到: " + outputFile);}if (cmd.hasOption("v")) {System.out.println("详细模式已启用");}// 实际文件处理逻辑...} catch (ParseException e) {System.err.println("错误: " + e.getMessage());formatter.printHelp("fileprocessor", options, true);System.exit(1);}}
}
2. 配置加载工具
package org.hbin.cli;import java.util.Properties;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;public class ConfigLoader {public static void main(String[] args) {Options options = new Options();// 配置文件选项options.addOption("c", "config", true, "配置文件路径");// 多值系统属性options.addOption(Option.builder("D").hasArgs().valueSeparator().desc("系统属性,格式为-Dkey=value").build());try {CommandLine cmd = new DefaultParser().parse(options, args);if (cmd.hasOption("c")) {String configFile = cmd.getOptionValue("c");System.out.println("加载配置文件: " + configFile);}if (cmd.hasOption("D")) {Properties props = cmd.getOptionProperties("D");System.out.println("系统属性:");props.forEach((k, v) -> System.out.println(" " + k + " = " + v));}} catch (ParseException e) {new HelpFormatter().printHelp("configloader", options);System.exit(1);}}
}
六、最佳实践
- 必选参数检查:使用
required(true)
标记必选参数 - 友好的帮助信息:为每个选项提供清晰的描述
- 参数验证:解析后应对参数值进行额外验证
- 错误处理:捕获
ParseException
并提供有用的错误信息 - 代码组织:将选项定义、解析和处理逻辑分开
七、常见问题解答
Q1: 如何处理未知选项?
A: DefaultParser
默认会抛出 ParseException
,你可以在 catch 块中处理这种情况。
Q2: 如何支持子命令?
A: Commons CLI 本身不直接支持子命令,但可以通过组合多个 Options
对象来实现类似功能。
Q3: 如何设置选项的默认值?
A: 可以在获取选项值时提供默认值:
String value = cmd.getOptionValue("option", "default");
Q4: 如何处理多个相同的选项?
A: 使用 getOptionValues()
方法:
String[] values = cmd.getOptionValues("option");
八、总结
通过本教程,你已经学会了:
- 如何在项目中引入 Commons CLI
- 如何定义各种类型的命令行选项
- 如何解析和处理命令行参数
- 如何生成标准化的帮助信息
- 几个实用的实战案例
Commons CLI 是 Java 开发命令行工具的利器,掌握它能让你快速构建出专业级的命令行应用。现在,尝试为你自己的项目添加命令行支持吧!
相关文章:
Apache Commons CLI 入门教程:轻松解析命令行参数
文章目录 Apache Commons CLI 入门教程:轻松解析命令行参数一、什么是 Commons CLI?二、为什么选择 Commons CLI?三、快速开始1. 添加依赖2. 基础示例3. 运行示例1. 在Idea中运行2. 命令行中运行3. 使用 Maven/Gradle 运行(推荐&a…...
Kubernetes Operator 是什么,以及它们的用途
最近一个朋友问我关于EKS的升级问题: 场景: 如果我有 100 个 EKS 集群需要升级,那么所有集群都安装了安全插件。由于我不想在升级后手动在每个EKS中重复安装此插件,如何实现EKS升级后自动安装这个安全插件? 答案有多…...
SAP ABAP语言中的比较运算符
一、基本比较运算符 运算符描述关键字形式符号形式示例等于EQIF a EQ b 或 IF a b不等于NE<>IF a NE b 或 IF a <> b大于GT>IF a GT b 或 IF a > b小于LT<IF a LT b 或 IF a < b大于等于GE❌ 不支持IF a GE b小于等于LE❌ 不支持IF …...
10秒调用大模型!思源笔记+Ollama实现实时AI推理助力写作效率提升
文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂…...
Linux网络DFS共享服务搭建
目录 一.存储类型 1.DAS优势和局限性 2.SAN的特点及组成 3.NAS优势与局限性 二.NFS服务 1.NFS工作原理 2.NFS工具 2.1 exportfs 2.2 showmount 3.实际操作 3.1.服务器操作 3.2.客户机操作 3.3.默认无法写操作 一.存储类型 存储类型分为三种 直连式存储:…...
汇舟问卷:国外问卷调查项目
这个项目现在市面上主要有三种玩法,我给你整点实在的: 第一种:上网站直接做调查(站点查) 和国内调查网站差不多,国外也有一堆调查网站。可以直接到国外问卷网站注册账号答题。 好处是题目现成的不用自…...
JSON-RPC 2.0 vs REST API 详细对比分析
现在要开始做一个新的业务模块了,系统思考下 新的业务模式应该是采用 JSON-RPC 2.0 还是 老套路 REST API 的接口协议 ,系统的学习下 1. 基本概念 JSON-RPC 2.0 无状态的、轻量级的远程过程调用(RPC)协议使用 JSON 作为数据格式…...
Python 类方法
Python 类方法示例 类方法是绑定到类而不是实例的方法,它们使用 classmethod 装饰器定义,第一个参数通常是 cls(表示类本身)。下面是一个具体的例子: class Employee:"""员工类"""rais…...
MVC流程讲解——以文件下载为例
整体的流程是这样: 用户点击一个树节点 → 请求远程机器该目录下的文件信息 → 显示在树控件和列表控件中。 🧱 MCV 模式简介(针对这个场景) 模块代表什么主要职责Model(模型)数据结构和逻辑表示你传输的…...
深度学习之线性代数基础
2.3.7 点积 ∑按位积 2.3.8 矩阵-向量积 2.3.9 矩阵-矩阵乘法 2.3.10 范数...
某公司网络OSPF单区域配置
1.配置背景: xx公司网络由三台路由器和一台交换机组成,现在想要三台路由器之间通过OSPF实现互连互通。 2.网络结构如下: 3.具体配置: 3.1路由器 RA 配置: 1.更改主机名称: Router>en Router#conf t…...
vue+flask+GNN+neo4j图书知识图谱推荐系统
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: F025 pro 架构: vueflaskneo4jmysqlpytorch 亮点:两种基于知识图谱的推荐算法(GNN和基于路径推荐&#x…...
小程序页面传值的多种方式
开发小程序,总是避免不了页面和页面之间数据共享,实现方法有很多种,以下就讲解一下小程序页面传值,需要的朋友可以参考下。 1 使用wx.navigateTo()传值 这种传值方式有两种, url后面拼接传值:需要跳转的…...
基于SSM框架的校园食堂小程序设计与实现
概述 基于SSM框架开发的微信小程序民大食堂用餐综合服务平台,该系统集成了商家管理、餐品展示、在线点。 主要内容 一、管理员模块功能实现 用户信息管理 管理员可添加、查看和删除用户信息,确保平台用户数据安全可靠。 商家信息管理…...
FOC算法对MCU计算资源的需求?
评估FOC(磁场定向控制)算法对MCU计算资源的需求,需从算法复杂度、硬件特性、实时性要求等多维度分析。以下是具体步骤和关键要点: 一、拆解FOC算法的核心模块及计算复杂度 FOC算法主要由以下子模块组成,需分别评估各模块的计算量: 1. 传感器采样与预处理 ADC采样:电流…...
在 Excel 中使用通义灵码辅助开发 VBA 程序
VBA 简介 VBA 是一种用于微软办公套件(如 Word、Excel、PowerPoint 等)的编程语言,它本质上是一种内嵌的脚本,或者可以认为是一段命令,其标准叫法被称为宏。 VBA 只能依赖于对应的软件进行开发,例如本文就…...
嵌入式基础(三)基础外设
嵌入式基础(三)基础外设 1.什么是UART?与USART有什么区别⭐⭐⭐ (1)什么是UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。是一种异步全双工串行通信协议,它将要…...
【微服务管理】深入理解 Gateway 网关:原理与实现
在当今微服务架构盛行的时代,Gateway 网关扮演着举足轻重的角色。它作为微服务架构的重要组成部分,为系统提供了统一的入口,承担着诸如路由转发、负载均衡、安全防护、流量控制等关键功能。本文将深入探讨 Gateway 网关的底层原理,…...
AI与无人驾驶汽车:如何通过机器学习提升自动驾驶系统的安全性?
引言 想象一下,在高速公路上,一辆无人驾驶汽车正平稳行驶。突然,前方的车辆紧急刹车,而旁边车道有一辆摩托车正快速接近。在这千钧一发的瞬间,自动驾驶系统迅速分析路况,判断最安全的避险方案,精…...
【网络安全】通过 JS 寻找接口实现权限突破
未经许可,不得转载。 本文所述所有风险点均已修复。 文章目录 引言正文引言 以下些漏洞已被起亚方面修复;起亚方面确认,这些漏洞从未被恶意利用过。 2024年6月11日,我们发现起亚汽车存在一系列严重安全漏洞,攻击者仅凭车牌号即可远程控制车辆的核心功能。该攻击不需要接触…...
【HarmonyOS NEXT】多目标产物构建实践
目录 什么是多产物构建 如何定义多个构建产物 如何在项目中使用 参考文章 什么是多产物构建 在鸿蒙应用开发中,一个应用可定义多个 product,每一个 product 对应一个定制的 APP 包,每个 product 中支持对 bundleName、bundleType、输出产…...
Openlayers:实现聚合
一、什么是聚合 聚合是一种将一定范围内的多个图形合并为一个图形的一种技术方案。通常用来解决图形过于集中或者图形数量过多的问题。 在Openlayers中主要通过Cluster数据源来实现聚合的效果。与其它的数据源不同,Cluster数据源在实例化时需要接收一个矢量数据源…...
相机内外参
文章目录 相机内参相机外参 相机的内外参是相机标定过程中确定的重要参数,用于建立图像像素坐标与实际世界坐标之间的关系。 相机内参 定义:相机内参是描述相机内部光学和几何特性的参数,主要包括焦距、主点坐标、像素尺度因子以及畸变系数等…...
轨道力学课程习题集
轨道力学课程习题集 第一讲:轨道力学概述 思考题 推导开普勒第三定律与牛顿万有引力定律的关系。 计算地球表面的第一宇宙速度和第二宇宙速度。 设计一个太阳同步轨道,高度为800公里,要求当地时间为上午10:30。 分析地球静止轨道的稳定性…...
【Web三十一】K8S的常用命令
01 基础资源操作 查看资源 # 查看 kube-system 命名空间下的 Pod 列表 kubectl get pods -n kube-system# 查看节点详细信息(IP、状态等) kubectl get nodes -o wide# 按标签筛选 Pod(例如筛选标签 appnginx 的 Pod) ku…...
GDPR/CCPA
定义 GDPR(通用数据保护条例) 适用范围:适用于欧盟境内所有成员国,以及处理欧盟居民个人数据的全球企业。 数据主体权利:用户有权知道、访问、更正、删除(被遗忘权)自己的数据,还有…...
Lua中的元表
2025年4月14日,周一上午 Lua中的元表(metatable)是一种特殊的表,用于定义或修改其他表(或用户数据类型)的行为。通过元表中的元方法(meta-methods),开发者可以自定义表在…...
Sql Server(自用查看版)
目录 1、基本数据库相关概念 1.1数据Data 1.2数据库DataBase,DB 1.3数据库管理系统DataBase Management System,DBMS 1.4数据库系统 DataBase System DBS 1.5数据库系列架构 2、SQL sever 基本概念 单表查询 查询所有列的信息,用* 查询部分列:…...
【JavaScript】二十、电梯导航栏的实现
文章目录 1、案例:电梯导航1.1 需求分析与实现1.2 关键思路梳理 2、属性选择器补充 1、案例:电梯导航 1.1 需求分析与实现 需求:点击不同的模块,页面可以自动跳转不同的位置 模块分析: 页面滚动到对应位置,导航显示…...
【Python】OpenCV图像处理
文章目录 OpenCV安装查看版本getVersionString查看图片像素shape打开图片imshowRGB灰度图图像裁剪image绘制处理噪点图像特征提取匹配图像梯度(canny边缘检测)阈值图像的形态学(腐蚀、膨胀)打开电脑的摄像头 OpenCV OpenCV&#…...
HTTP协议 --- 超文本传输协议 和 TCP --- 传输控制协议
是基于 TCP 协议的 80 端口的一种 C/S 架构协议。 特点:无状态 --- 数据传输完成后,会断开 TCP 连接,哪怕浏览器还正常运行。 请求报文 --- 方法 响应报文 --- 状态码 是一种面向连接的可靠传输协议 。 面向连接 --- 在传输数据之前&am…...
微信小程序实现table样式,自带合并行合并列
微信小程序在代码编写过程好像不支持原生table的使用,在开发过程中偶尔又得需要拿table来展示。 1.table效果展示 1.wxml <view class"table-container"><view class"table"><view class"table-row"><view cla…...
【NLP】25.python实现点积注意力,加性注意力,Decoder(解码器)与 Attention
1. 点积注意力(Dot-Product Attention) 点积注意力是最简单的注意力机制之一,其基本思想是通过计算查询(query)和键(key)之间的点积来得到相似度,进而为每个值(value&am…...
基础贪心算法集合2(10题)
目录 1.单调递增的数字 2.坏了的计算器 3.合并区间 4.无重叠区间 5. 用最少数量的箭引爆气球 6.整数替换 解法1:模拟记忆化搜索 解法2位运算贪心 7.俄罗斯套娃信封问题 补充.堆箱子 8.可被3整除的最大和 9.距离相等的条形码 10.重构字符串 1.单调递增的数字…...
Oracle OCP知识点详解3:使用 vim 编辑文件
一、Vim 核心模式解析 1.1 模式切换图谱 graph LR A[普通模式] -->|i/I/a/A| B[插入模式] B -->|Esc| A A -->|v/V/Ctrlv| C[可视模式] A -->|: / ?| D[命令模式] C -->|Esc| A D -->|Enter| A 1.2 Oracle 场景高频模式组合 模式组合应用场景操作效率提…...
项目风险的早期识别与应对清单
项目风险的早期识别与应对策略的核心在于: 建立系统化的风险识别流程、评估风险的影响程度、制定详细的应对措施、持续监控与调整风险管理计划。 其中,建立系统化的风险识别流程是风险管理的第一步,也是最为关键的一环。通过构建一套有效的识…...
springboot数据动态脱敏
反射Jackson数据动态脱敏 我有两个字段,name和type,我想要在type为1对数据脱敏,而其他情况不脱敏: CustomSerializer注解 Target(ElementType.FIELD) //表示这个注解只能用在字段上 Retention(RetentionPolicy.RUNTIME) //注解…...
算法:定义一个数组的的陡峭值为:相邻两个元素之差的绝对值之和。
定义一个数组的的陡峭值为:相邻两个元素之差的绝对值之和。现在小红拿到了一个数组,她有多次询问,每次查询一段连续子数组的陡峭值。你能帮帮她吗? 连续子数组为从原数组中,连续的选择一段元素(可以全选、可以不选)得到的新数组。 输入描述 …...
【AI提示词】网络安全专家
提示说明 网络安全专家在数字时代扮演着至关重要的角色,他们通过专业的知识和技能保护网络系统免受攻击和破坏,确保数据的安全和隐私。 提示词 # 角色 网络安全专家## 性格类型指标 INTP(内向直觉思维感知型)## 背景 网络安全专…...
AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理
AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理 在人工智能快速发展的今天,大语言模型(如GPT、BERT等)已经成为改变世界的重要技术。但对于很多人来说,理解这些模型的工作原理仍然是一个挑战。为了帮助更多…...
解决无人机无人化自主巡检面对的新挑战-机载通信、控制及算力的AIBOX
解决无人机无人化自主巡检面对的新挑战-机载通信、控制及算力的AIBOX 之前的微文:基于无人机的无人化自主巡检-大疆机场3M4TD,介绍了机场3的无人机无人机巡检的特点以及局限性。此处从通信增强、飞行及位置服务增强、智慧飞行以及无人机编队几个方面阐述…...
供应商涨价,项目如何控制采购成本
优化供应商结构、严格控制交付流程、强化谈判策略、设置弹性预算、建立长远合作机制 来有效控制采购成本。其中,强化谈判策略 是最核心的一步:不仅要明确价格承受范围,还需根据对方供应链特点和市场行情,准备多套备选方案…...
newbee商城购物车模块mapper.xml
1.浏览代码 1)表 自定义 DROP TABLE IF EXISTS tb_newbee_mall_shopping_cart_item; CREATE TABLE tb_newbee_mall_shopping_cart_item (cart_item_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 购物项主键id,user_id bigint(20) NOT NULL COMMENT 用户主键id…...
高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?
如果有遗漏,评论区告诉我进行补充 面试官: 如何监控Nacos的运行状态? 我回答: 监控Nacos运行状态的综合方案 在Java高级面试中,监控Nacos运行状态是一个重要的技术点,它直接关系到微服务架构的稳定性和性能。以下是一个综合的监控方案&am…...
开源技术如何助力中小企业实现财务管理自主化?
中小企业的数字化困境与开源机遇 国际数据公司(IDC)研究显示,全球67%的中小企业因高昂的软件成本和僵化的功能设计,未能有效推进数字化转型。传统商业软件常面临三大矛盾: 功能冗余与核心需求缺失:标准化系…...
3D-DIC技术:煤层开采瓦斯防治的精准监测解决方案
3D-DIC非接触式三维全场应变测量系统是基于数字图像相关算法(DIC)的一种光学测定应变、变形的方法。由CCD相机、光源、支架、数据采集器和DIC软件组成。 一、DIC技术瓦斯防治应用 新拓三维XTDIC三维全场应变测量系统,通过两个工业相机采集图…...
CS5346 - Annotation in Visualization (可视化中的注释)
文章目录 Annotation 的重要性Levels of Annotation (注释的层级)Headings and IntroductionHeadings(标题)陈述型(Statement):突出结论或有趣发现疑问型(Question)&…...
VRoid-Blender-Unity个人工作流笔记
流程 VRoid 选配模型>减面、减材质>导出vrm Blender(先有CATS、vrm插件) 导入vrm>Fix model>修骨骼>导出fbx Unity 找回贴图、改着色器、调着色器参数…… VRoid 减面 以模型不出现明显棱角为准。脸好像减面100也问题不大。 下…...
【ROS2】行为树 BehaviorTree(三):异步操作
【ROS】郭老二博文之:ROS目录 1、简述 前面的例子中,使用过同步节点 SyncActionNode,当调用到该节点时,成功返回SUCCESS,失败返回FAILURE,并且线程会等待该节点执行完毕。 如果需要异步操作,比如节点执行需要很长时间,不能立刻返回结果,可以先去执行其它任务,等该…...
Uniapp:本地存储
目录 一、概述二、分类三、同步存储:setStorageSync3.1 方法3.2 案例3.2.1 存储3.2.2 获取3.2.3 获取storage3.2.4 删除3.2.5 清空 四、异步存储:setStorage4.1 方法4.2 案例4.2.1 存储数据4.2.2 获取数据4.2.3 获取storage详情4.2.4 删除4.2.5 清空 一、…...