SpringBoot怎么动态修改yml配置文件
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"SpringBoot怎么动态修改yml配置文件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2026年11月03日SpringBoot怎么动态修改yml配置文件
本篇内容介绍了"SpringBoot怎么动态修改yml配置文件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
前言
记录下SpringBoot修改yml配置文件后无需重启服务的方式(打包后生效),效果如下:
具体实现
实现代码
pom.xml
org.springframework.boot spring-boot-starter-web org.projectlombok lombok
application.yml
#端口号server: port: 31091spring: profiles: active: dev
application-dev.yml
coisini: mail: maggieq8324@gmail.com
InitializationConfig.java
import lombok.extern.slf4j.Slf4j;import org.springframework.boot.ApplicationArguments;import org.springframework.boot.ApplicationRunner;import org.springframework.stereotype.Component;import java.util.Map;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * @Description spring容器初始化完成后进行一些其他初始化操作 * @date Mar 24, 2022 * @version 1.0 */@Slf4j@Componentpublic class InitializationConfig implements ApplicationRunner { private static ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); private static String profile; @Override public void run(ApplicationArguments applicationArguments) throws Exception { scheduleUpdateConf(); } private void scheduleUpdateConf() { try { Map lhm = YmlUtil.loadYaml("application.yml"); profile = (String) YmlUtil.getValByKey(lhm, "spring.profiles.active"); } catch (Exception e) { log.error("加载配置文件application.yml异常"); } // TODO 开启定时刷新内存中配置文件内容 log.info("refresh config file start"); executorService.scheduleAtFixedRate(InitializationConfig::updateConfVal, 0, 10, TimeUnit.SECONDS); log.info("refresh config file end"); } /** * 更新配置文件值 */ private static void updateConfVal(){ try{ Map lhm = YmlUtil.loadYaml("application-" + profile + ".yml"); String mail = YmlUtil.getValByKey(lhm,"coisini.mail").toString(); DynamicMailConfig instance = DynamicMailConfig.getInstance(); if (!instance.getDynamicMail().equals(mail)) { instance.setDynamicMail(mail); log.info("实时配置mail更新:" + instance.getDynamicMail()); } } catch (Exception e){ log.error("更新配置文件值异常: ", e); } }}DynamicMailConfig.java
/** * @Description 动态邮箱单例 * @date Mar 24, 2022 * @version 1.0 */public class DynamicMailConfig { private static String mail; private final static DynamicMailConfig dynamic; static { dynamic = new DynamicMailConfig(); } private DynamicMailConfig() { mail = ""; } public static DynamicMailConfig getInstance() { return dynamic; } public String getDynamicMail() { return mail; } public void setDynamicMail(String mail) { this.mail = mail; }}YmlUtil.java
import org.yaml.snakeyaml.Yaml;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.LinkedHashMap;import java.util.Map;/** * @Description 动态操作yml配置文件工具类 * 【需要将config配置文件夹和项目jar包放在同级别目录下,这样修改config下的配置文件后,jvm才能及时得获取新的配置】 * @date Mar 24, 2022 * @version 1.0 */public class YmlUtil { public static LinkedHashMap loadYaml(String fileName) throws Exception{ String path = System.getProperty("user.dir"); File file = new File(path + "/config/" + fileName); InputStream in; if (file.exists()) { in = new FileInputStream(path + "/config/" + fileName); } else { // TODO 如果没有config文件夹,则从项目的resources目录下找 in = YmlUtil.class.getClassLoader().getResourceAsStream(fileName); } LinkedHashMap lhm = new Yaml().loadAs(in, LinkedHashMap.class); return lhm; } public static Object getValByKey(Map lhm, String key) throws Exception{ String[] keys = key.split("[.]"); Map ymlInfo = lhm; for (int i = 0; i < keys.length; i++) { Object value = ymlInfo.get(keys[i]); if (i < keys.length - 1) { ymlInfo = (Map) value; } else if (value == null) { throw new Exception("key不存在"); } else { return value; } } return null; }}测试
TestController.java
@Slf4j@RestControllerpublic class TestController { @GetMapping("/getDynamicMail") public String getDynamicMail() { String dynamicMail = DynamicMailConfig.getInstance().getDynamicMail(); log.info("getDynamicMail: " + dynamicMail); return dynamicMail; }}打包后配置文件放在与jar同级的config目录下
"SpringBoot怎么动态修改yml配置文件"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
配置
文件
动态
内容
目录
更新
文件夹
更多
知识
项目
实用
学有所成
接下来
代码
内存
前言
口号
同级
困境
实时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东万易互联网科技有限公司惠州分公司
上海睿民互联网科技有限公司
互联网科技工作委员会
新华互联网科技学校
今日互联网科技
科技与互联网发展
卓越科技互联网 招聘
济南和联互联网科技有限公司
青岛中康互联网医疗科技有限公司
北京大学互联网科技怎么样
欧洲十大科技互联网公司
移动互联网科技公司
南博望互联网科技有限公司
电子商务与互联网科技的关系
新氧科技和美国互联网有关系吗
上海同邻互联网科技有限公司规模
萌小萌互联网科技河南有限公司
容联科技互联网电商
万物互联网智能科技
科技美学互联网 艺术
云南咖啡
科技股互联网
科技企业和互联网企业
互联网中国科技
互联网科技公司官网
奇酷互联网科技公司
卓越科技互联网 招聘
互联网经济与金融科技
智腾互联网科技有限公司
互联网数据科技专业