求Spring Boot 3修改application配置项的Recipe实现示例
读取并转换Spring Boot 3配置文件中的配置项
要实现读取Spring Boot 3的application.properties或application.yml文件并转换配置项key,推荐使用Jackson的YAML处理库(Spring Boot已内置依赖),直接解析配置为Map后修改key,再写回文件。以下是具体实现示例:
实现步骤(YAML文件为例)
1. 确认依赖
Spring Boot项目默认已包含jackson-dataformat-yaml,若需手动添加Maven依赖:
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency>
2. 配置转换代码示例
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import java.io.File; import java.io.IOException; import java.util.Map; public class ConfigKeyConverter { public static void main(String[] args) throws IOException { // 初始化YAML解析器 ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory()); // 读取原YAML配置文件 File originalConfig = new File("src/main/resources/application.yml"); Map<String, Object> configMap = yamlMapper.readValue(originalConfig, Map.class); // 定位到spring.datasource节点并修改key Map<String, Object> springNode = (Map<String, Object>) configMap.get("spring"); Map<String, Object> datasourceNode = (Map<String, Object>) springNode.get("datasource"); // 替换key:url→connectionString,username→user,password→pwd datasourceNode.put("connectionString", datasourceNode.remove("url")); datasourceNode.put("user", datasourceNode.remove("username")); datasourceNode.put("pwd", datasourceNode.remove("password")); // 将转换后的配置写入新文件 File convertedConfig = new File("src/main/resources/application-converted.yml"); yamlMapper.writeValue(convertedConfig, configMap); } }
处理Properties文件的方案
如果是.properties文件,可使用Java原生Properties类处理:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; public class PropertiesConverter { public static void main(String[] args) throws IOException { Properties props = new Properties(); // 读取原文件 try (FileInputStream fis = new FileInputStream("src/main/resources/application.properties")) { props.load(fis); } // 替换key props.setProperty("spring.datasource.connectionString", props.remove("spring.datasource.url")); props.setProperty("spring.datasource.user", props.remove("spring.datasource.username")); props.setProperty("spring.datasource.pwd", props.remove("spring.datasource.password")); // 写入新文件 try (FileOutputStream fos = new FileOutputStream("src/main/resources/application-converted.properties")) { props.store(fos, "Converted config"); } } }
注意事项
- 配置中的占位符(如
${spring.datasource.url})会被原样保留,无需额外处理 - 处理多层嵌套配置时,需确保类型转换正确,避免
ClassCastException - 若需要集成到Spring Boot应用中运行,可通过
@Value或Environment读取配置后再转换输出
内容的提问来源于stack exchange,提问作者Tallen67
相关产品推荐
相关产品推荐

