You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Spring Boot自定义库如何更新父模块.yml的datasource.password值

解决方案:在Spring Boot自定义库中更新父模块YAML配置文件的密码

核心思路

直接操作YAML配置文件的读写流程,借助SnakeYAML库解析并生成符合原格式的YAML内容,精准替换目标属性值。

步骤实现

1. 添加SnakeYAML依赖

在自定义库的Maven配置文件中引入YAML解析依赖:

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>2.2</version>
</dependency>

2. 编写YAML配置更新工具类

该类负责完成YAML文件的读取、属性修改、格式保留与写回操作:

import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;

public class YamlConfigUpdater {

    public void updateDatasourcePassword(String configFilePath, String newPassword) throws IOException {
        // 读取YAML文件到Map结构
        Yaml yamlReader = new Yaml();
        try (FileInputStream inputStream = new FileInputStream(configFilePath)) {
            Map<String, Object> configMap = yamlReader.load(inputStream);

            // 定位datasource节点并更新password属性
            Map<String, Object> datasourceNode = (Map<String, Object>) configMap.get("datasource");
            if (datasourceNode != null) {
                datasourceNode.put("password", newPassword);
            }

            // 配置输出格式,匹配原文件的缩进和块风格
            DumperOptions dumpOptions = new DumperOptions();
            dumpOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
            dumpOptions.setIndent(4); // 与原配置文件缩进量保持一致
            Yaml yamlWriter = new Yaml(dumpOptions);

            // 将修改后的内容写回配置文件
            try (FileWriter writer = new FileWriter(configFilePath)) {
                yamlWriter.dump(configMap, writer);
            }
        }
    }
}

3. 在自定义库业务逻辑中调用

结合第三方API密码获取逻辑,执行配置更新:

// 调用第三方API获取新密码
String updatedPassword = fetchPasswordFromThirdPartyApi();

// 获取父模块配置文件路径(可通过Spring Environment获取,或由父应用指定)
String configFilePath = "src/main/resources/application.yml"; // 根据实际部署路径调整

// 执行密码更新
YamlConfigUpdater updater = new YamlConfigUpdater();
try {
    updater.updateDatasourcePassword(configFilePath, updatedPassword);
} catch (IOException e) {
    // 处理文件读写异常
    e.printStackTrace();
}

关键注意事项

  • 配置路径定位:若父应用为打包后的Jar包,建议通过Environment.getProperty("spring.config.location")获取实际加载的外部配置文件路径,避免读取Jar内部的只读文件。
  • 文件权限:确保运行应用的用户拥有配置文件的读写权限,否则会抛出IO异常。
  • 配置生效时机:修改物理文件后,Spring Boot不会自动刷新已加载的配置。若需立即生效新密码,可结合@RefreshScope实现自定义刷新逻辑,或重启父应用。

内容的提问来源于stack exchange,提问作者Rajesh Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:23:19