ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入
文章目录
- 前言
- 引入包
- yaml原始内容
- 操作目标
- 具体代码
- 执行
- 查看结果
- 总结:
前言
之前有个需求,动态修改ubuntu20的ip,看了下: 本质上是
修改01-netcfg.yaml文件,然后执行netplan apply就可以了。
所以,需求就变成了 如何对yaml文件的内容进行读取,修改,写入。
引入包
其实springboot提供了2个maven的包用于解析yaml(springboot的各种配置文件都是yaml),引入:
<!-- Jackson (用于JSON处理) --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- SnakeYAML (用于YAML解析和生成) --><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId></dependency>
yaml原始内容
network:version: 2renderer: networkdethernets:eth0:dhcp4: falseaddresses:- 192.168.150.1/24optional: trueeth1:dhcp4: falseaddresses:- 192.168.150.1/24optional: trueenp3s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp4s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp6s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp7s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp8s0:dhcp4: falseaddresses:- 192.168.150.1/24dhcp-identifier: macoptional: true
操作目标
目前的配置文件etho网卡是动态的获取ip,现在把配置文件ech修改如下:
固定ip:dhcp4 --》 false
添加网卡: gateway4: 172.16.10.254
设置ip地址:
设置dns,不然不能上外网

具体代码
public static void main(String[] args) {try {// Step 1: 读取YAML文件并加载为Map, 输入YAML文件路径InputStream inputStream = new FileInputStream("01-netcfg.yaml");Yaml yaml = new Yaml();Map<String, Object> yamlMap = yaml.load(inputStream);// Step 2: 使用ObjectMapper将Map转换为JSON字符串ObjectMapper om = new ObjectMapper();String jsonStr = om.writeValueAsString(yamlMap);// Step 3: 将JSON字符串解析成JsonNode,便于修改JsonNode rootNode = om.readTree(jsonStr);// Step 4: 修改eth0节点JsonNode ethernetsNode = rootNode.path("network").path("ethernets");// 获取eth0节点并修改其值JsonNode eth0Node = ethernetsNode.path("eth0");// 创建新的eth0配置((ObjectNode) eth0Node).put("dhcp4", false);((ObjectNode) eth0Node).putArray("addresses").add("172.16.10.43/24");((ObjectNode) eth0Node).put("gateway4", "172.16.10.254");// 设置新的DNS地址作为数组JsonNode nameserversNode = eth0Node.path("nameservers");// 使用ArrayNode来生成数组格式ArrayNode arrayNode = om.createArrayNode();arrayNode.add("114.114.114.114");arrayNode.add("8.8.8.8");arrayNode.add("8.8.4.4");((ObjectNode) nameserversNode).set("addresses", arrayNode);// Step 5: 将修改后的JsonNode转换为Map,这里就是将JsonNode转换为MapMap<String, Object> modifiedMap = om.convertValue(rootNode, Map.class);// Step 6: 使用SnakeYAML将修改后的Map转换为YAML格式DumperOptions options = new DumperOptions();options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);Yaml yamlWriter = new Yaml(options);StringWriter stringWriter = new StringWriter();yamlWriter.dump(modifiedMap, stringWriter);// Step 7: 将新的YAML写回文件try (BufferedWriter writer = new BufferedWriter(new FileWriter("01-netcfg.yaml"))) {writer.write(stringWriter.toString());}System.out.println("YAML updated successfully!");} catch (IOException e) {e.printStackTrace();}
执行

查看结果

显示已经修改!!
总结:
文章主要介绍了如何使用Java操作YAML文件,具体实现了读取、修改和写入YAML文件的过程。通过引入Jackson和SnakeYAML两个包,实现了将YAML文件内容转换为Map,然后再将Map修改后重新转换为YAML格式并写回文件。
在具体操作目标上,通过代码示例实现了将原始YAML文件中的某一节点进行修改,包括修改网络配置,设置固定IP地址、网关、DNS等。最后展示了执行结果,并验证配置已经修改成功。
通过本文的示例,读者可以了解如何在Java中操作YAML文件,实现对YAML配置文件的动态修改,为实际项目中类似需求提供了解决思路和代码实现。
本文完
相关文章:
ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入
文章目录 前言引入包yaml原始内容操作目标具体代码执行查看结果总结: 前言 之前有个需求,动态修改ubuntu20的ip,看了下: 本质上是修改01-netcfg.yaml文件,然后执行netplan apply就可以了。 所以,需求就变成了 如何对ya…...
tailwindcss学习02
vue中接入tailwindcss 使用cmd不要使用powershell npm create vitelatest stu02 -- --template vue cd stu02npm install --registry http://registry.npm.taobao.org npm install -D tailwindcss3.4.17 postcss autoprefixer --registry http://registry.npm.taobao.org npx t…...
千峰React:脚手架准备+JSX基础
组件化->封装性 React提供函数组件实现组件化 React和传统JS的区别就是JS需要手动管理DOM操作,React: 采用组件化开发,通过虚拟DOM提升性能。 MVC 是一种软件设计模式,全称为 Model-View-Controller(模型-视图-控制器&#x…...
【算法】快排
题目 快排 思路 如果输入为0或1直接返回;否则取一个基准值,可以取中间位置,如果输入是有序的可以避免时间过长,然后移动指针,先让i指针右移,如果小于基准值就继续右移,j指针左移同理。如果指…...
开放签电子签章工具版 2.0 正式发布,构建全场景电子签约能力、满足复杂的签章管理场景
根据近半年开源用户和市场需求反馈,开放签团队推出电子签章工具版2.0版本,主要解决复杂的签约流程集成和电子印章授权管理场景。以API接口对外提供服务和配置一套可视化后台管理系统,可与业务系统无缝集成,用户使用起来毫无“违和…...
python和pycharm 和Anaconda的关系
好的,下面我会详细说明 Python、PyCharm 和 Anaconda 三者的关系,并逐一解释它们的功能和作用。 1. Python(编程语言) 定义:Python 是一种高级编程语言,设计简洁,易于学习,且功能强…...
DeepSeek V3和R1
DeepSeek V3 和 R1 是深度求索(DeepSeek)推出的两款大模型,基于混合专家架构(MoE),但在设计目标、训练方法和应用场景上存在显著差异。以下是两者的详细对比与补充内容: DeepSeek V3和R1 一、模…...
JavaScript数组-获取数组中的元素
在JavaScript中,数组是一种非常实用的数据结构,它允许我们将多个值存储在一个单独的变量中。无论是数字、字符串还是对象,都可以作为数组的元素。获取数组中的特定元素是操作数组的基础技能之一。本文将详细介绍如何在JavaScript中获取数组中…...
SSE:用于流式传输的协议
一.什么是SSE SSE协议是一种基于http协议的单向通信协议,服务端可以向客户端发送数据,但是客户端不能向服务器发送数据。客户端通过创建一个到服务器的单向连接来监听事件。可以将一次性返回数据包改为流式返回数据。SSE协议支持断线重连,也支…...
Aseprite详细使用教程(7)——切片工具
1.名词解释 快捷键:ShiftC 切片工具功能(了解即可): (1)优化资源加载: 将较大的图像切成多个较小的切片,可减小单个文件大小,在网页或游戏等场景中,能显著提升加载速度…...
航空公司客户价值分析
目录 1 目的 2 方法 3 源代码 4 结果 5 扩展 1 目的 ①借助航空公司客户数据,对客户进行分类; ②对不同的客户类别进行特征分析,比较不同类别的客户的价值; ③针对不同价值的客户类别制定相应的营销策略,为其提供个性…...
基于开源Odoo、SKF Phoenix API与IMAX-8数采网关的圆织机设备智慧运维实施方案 ——以某纺织集团圆织机设备管理场景为例
一、方案背景与需求分析 1.1 纺织行业设备管理痛点 以某华东地区大型纺织集团为例,其圆织机设备管理面临以下挑战: 非计划停机损失高:圆织机主轴轴承故障频发,2024年单次停机损失达12万元(停机8小时导致订单延误&am…...
LLM 架构
LLM 分类 : 自编码模型 (encoder) : 代表模型 : BERT自回归模型 (decoder) : 代表模型 : GPT序列到序列模型 (encoder-decoder) : 代表模型 : T5 自编码模型 (AutoEncoder model , AE) 代表模型 : BERT (Bidirectional Encoder Representation from Transformers)特点 : Enc…...
Word Embeddings
Count-based Approach Term-document matrix: Document vectors Two ways to extract information from the matrix: Column-wise: a document is represented by a |V|-dim vector (V: vocabulary) Widely used in information retrieval: find similar documents 查找類似…...
相机开发调中广角和焦距有什么不一样
在相机中,调整广角和调整焦距是两个不同的概念,它们的作用和实现方式也不同。以下是两者的详细对比和解释: 1. 调整广角 定义 广角是指相机的视野范围(Field of View, FOV)。调整广角实际上是调整相机的视野范围。更广的视野意味着可以捕捉到更多的场景内容(更宽的画面)…...
krpano学习笔记,端口修改,krpano二次开发文档,krpano三维div信息展示,krpano热点显示文字
一、修改krpano端口 .\tour_testingserver -port8085 ,修改端口,指定启动时的端口 二、给krpano添加div展示信息 和场景一起转动,不是layer,layer是固定的,没啥用。 主要是onloaded里面的1个方法。 <action name…...
Jenkins 给任务分配 节点(Node)、设置工作空间目录
Jenkins 给任务分配 节点(Node)、设置工作空间目录 创建 Freestyle project 类型 任务 任务配置 Node 打开任务-> Configure-> General 勾选 Restrict where this project can be run Label Expression 填写一个 Node 的 Label,输入有效的 Label名字&#x…...
深入解析iOS视频录制(二):自定义UI的实现
深入解析 iOS 视频录制(一):录制管理核心MWRecordingController 类的设计与实现 深入解析iOS视频录制(二):自定义UI的实现 深入解析 iOS 视频录制(三):完…...
跳表的C语言实现
跳表(Skip List)是一种基于链表的动态数据结构,用于实现高效的查找、插入和删除操作。它通过引入多级索引来加速查找过程,类似于多级索引的有序链表。跳表的平均时间复杂度为 O(logn),在某些场景下可以替代平衡树。 以…...
Java Web开发实战与项目——Spring Security与权限管理实现
Web应用中,权限管理是系统安全的核心部分,确保用户只能访问他们被授权的资源。Spring Security是Spring框架中的一个安全框架,它提供了强大的认证和授权功能,用于实现用户认证和权限控制。本章节将详细讲解如何使用Spring Securit…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
