spring boot项目如何通过代码去修改yml里面配置项的值?

spring boot项目如何通过代码去修改yml里面配置项的值?谢谢

4个回答

为什么要修改配置文件的值呢

u014794644
瓦史托德 回复猿来你也在这: 你百度一下多数据源的配置都有,做这么麻烦,还不如弄成多数据源,做成动态切换
一年多之前 回复
huifeidedaxiang
猿来你也在这 回复瓦史托德:我现在只是一个单体的应用,没有用springcloud config,我修改了yml配置文件里mysql的配置,如何重新实例化数据源呢?
一年多之前 回复
u014794644
瓦史托德 回复猿来你也在这: 这不合理吧,你修改了mysql,还要重新实例化数据源。或者直接使用springcloud config自动刷新
一年多之前 回复
huifeidedaxiang
猿来你也在这 有个需求,就是有一个界面来维护配置文件里的配置信息,比如修改mysql
一年多之前 回复

这种可以不用yml文件,看具体需求,把配置存到数据库表中,项目启动时加载数据库中的配置

Spring有两种配置方式 JavaBean配置和配置文件配置,javaBean配置优先。你可以在代码里面用javaBean配置的方式修改。

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

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.Map;
import org.yaml.snakeyaml.Yaml;
public class YmlUpdateUtil {

public static void updateYamlFile() {
    String src = "src/main/resources/application.yml";
    Yaml yaml = new Yaml();
    FileWriter fileWriter = null;
    //层级map变量
    Map<String, Object> springMap, dataSourceMap, resultMap,helperDialect;
    try {
        //读取yaml文件,默认返回根目录结构
        resultMap = (Map<String, Object>) yaml.load(new FileInputStream(new File(src)));
        //get出spring节点数据
        springMap = (Map<String, Object>) resultMap.get("spring");
        //get出数据库节点数据
        dataSourceMap = (Map<String, Object>) springMap.get("datasource");
        //修改数据库url,我这个是封装的参数,你们测试可以写死一个值尝试修改即可
        dataSourceMap.put("url", "jdbc:mysql://192.168.2.80:3306/jksd?characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong&allowPublicKeyRetrieval=true");
        //登录名
        dataSourceMap.put("username", "root");
        //驱动
        dataSourceMap.put("driverClassName", "com.mysql.cj.jdbc.Driver");
        //密码
        dataSourceMap.put("password", "123456");
       // helperDialect = (Map<String, Object>) springMap.get("pagehelper");
      //  helperDialect.put("helperDialect", "sqlserver");
        //字符输出
        fileWriter = new FileWriter(new File(src));
        //用yaml方法把map结构格式化为yaml文件结构
        fileWriter.write(yaml.dumpAsMap(resultMap));
        //刷新
        fileWriter.flush();
        //关闭流
        fileWriter.close();
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("对不起,yaml文件修改失败!");
    }
}

}

可以修改但是没有更新 配置信息

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问