springboot 动态修改配置文件

@Configuration
public class SetProperties {

    /**
     * application.properties加载完毕后执行
     * @throws IOException
     */
    @PostConstruct
    public void init() throws IOException {
        //文件夹中读取
        InputStream inputStream = new FileInputStream("D:/*/*/*/config/my.properties");
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        Map<String, Object> map = new HashMap<>();
        while ((line = br.readLine()) != null) {
            //配置项不等于"" 并且排除注释配置项,并将读取到的配置项转成map集合
            if (!line.equals("") && !line.substring(0, 1).equals("#")){
                String[] split = line.split("=",2);
                if (split.length >0){
                    map.put(split[0],split[1]);
                }
            }
        }

        //配置文件名
        String fileName = "application.properties";
        
        //classpath 类路径
        String filePath = PropertiesUtil.class.getClassLoader().getResource(fileName).getFile();
        filePath = URLDecoder.decode(filePath, "utf-8");

        //配置项集合
        Properties props = PropertiesLoaderUtils.loadProperties(new ClassPathResource(fileName));
        
        for (Map.Entry<String,Object> entry : map.entrySet()){
            //修改相同key的值,值为文件夹map的vlaue
            //没有相同的key,会做添加操作
            props.setProperty(entry.getKey(), (String) entry.getValue());
        }
        
        //写入流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)));
        props.store(bw, "");
        bw.close();
    }

}

注:需要每次重启服务,在考虑不损耗资源的情况下,可以使用定时任务

Spring Boot配置文件是基于Spring Framework的Environment和PropertySource抽象构建的。Spring Boot在启动时会创建一个Environment实例,该实例包含了应用程序中所有的属性和配置信息。在应用程序启动时,Spring Boot会将所有的配置文件加载到Environment中,然后将其包装到一个CompositePropertySource中。 当修改配置文件时,Spring Boot会自动检测到文件的变化,并重新加载Environment中的属性和配置信息。这是通过使用Spring Boot的自动配置机制来实现的。自动配置机制会在应用程序启动时创建一个PropertySourceLoader,并使用它来加载配置文件。当文件发生变化时,自动配置机制会自动重新加载文件,并更新Environment中的属性和配置信息。 在Spring Boot中,可以使用@RefreshScope注解来实现动态刷新配置文件。该注解会使Spring Boot在属性值发生变化时自动更新Bean的值。具体来说,当使用@RefreshScope注解标注一个Bean时,Spring Boot会将该Bean包装在一个代理对象中,代理对象会在每次访问Bean时检查Bean的属性值是否发生了变化,如果发生了变化,则会重新创建Bean实例并返回新的实例。 总之,Spring Boot动态刷新配置文件的原理是通过自动检测配置文件的变化,重新加载属性和配置信息,并使用@RefreshScope注解将Bean包装在代理对象中,在属性值发生变化时重新创建Bean实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值