如何在Spring Boot中实现动态修改properties文件与POM依赖
动态修改Spring Boot项目POM依赖与properties配置的实现方案
一、修改POM.xml依赖项的实现
推荐使用官方Apache Maven Model工具处理POM文件,避免自定义解析XML带来的格式兼容问题。
首先引入处理依赖:
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <version>3.9.6</version> </dependency>
操作步骤:
- 读取现有POM文件:通过
MavenXpp3Reader将本地pom.xml文件读取为Model内存对象 - 操作依赖集合:从
Model对象中获取Dependencies集合,执行增删改操作- 新增:构造
Dependency对象,设置groupId、artifactId、version、scope等属性后加入集合 - 删除:遍历依赖集合,匹配groupId和artifactId后移除对应对象
- 修改:遍历找到目标依赖后,直接修改version、scope等属性
- 新增:构造
- 写回POM文件:通过
MavenXpp3Writer将修改后的Model对象覆盖写入原pom.xml文件
代码示例:
// 读取POM文件 MavenXpp3Reader reader = new MavenXpp3Reader(); Model pomModel = reader.read(new FileInputStream("/your/project/path/pom.xml")); // 新增依赖示例 Dependency fastjsonDep = new Dependency(); fastjsonDep.setGroupId("com.alibaba"); fastjsonDep.setArtifactId("fastjson"); fastjsonDep.setVersion("2.0.47"); pomModel.getDependencies().add(fastjsonDep); // 写入修改后的POM MavenXpp3Writer writer = new MavenXpp3Writer(); writer.write(new FileOutputStream("/your/project/path/pom.xml"), pomModel);
如果需要处理父POM、dependencyManagement节点,对应操作Model对象的getParent()和getDependencyManagement()方法即可
二、修改properties配置文件的实现
2.1 基础实现(JDK自带工具)
直接使用java.util.Properties类操作即可,无需额外引入依赖:
Properties props = new Properties(); // 读取配置文件 try(InputStream in = new FileInputStream("/your/project/path/application.properties")){ props.load(in); } // 增改配置 props.setProperty("server.port", "8082"); props.setProperty("spring.datasource.url", "jdbc:mysql://127.0.0.1:3306/test"); // 删除配置 props.remove("spring.datasource.druid.filters"); // 写回配置文件,第二个参数传空避免生成默认时间戳注释 try(OutputStream out = new FileOutputStream("/your/project/path/application.properties")){ props.store(out, ""); }
注意:JDK自带的Properties类会丢失原文件的注释和自定义排版,如果需要保留原文件格式,建议使用第三方库commons-configuration的PropertiesConfiguration实现
2.2 扩展:YML格式配置处理
如果需要处理yaml格式的配置文件,引入snakeyaml依赖即可:
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version> </dependency>
操作逻辑和properties类似,读取为嵌套Map对象后修改再写回即可。
内容的提问来源于stack exchange,提问作者mohit
相关产品推荐
相关产品推荐

