SpringBoot怎么动态修改yml配置文件
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容介绍了"SpringBoot怎么动态修改yml配置文件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2025年11月13日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安全错误
数据库的锁怎样保障安全
小学网络安全领导工作小组
广州硕丰互联网科技有限公司
虹口区网络技术服务包括什么
l4d2服务器
sql数据库驱动器
巨杉数据库测试笔试
魔兽世界免费服务器
数据库lxmlxpmk
替换数据库中同一个关键字
聚数据库
服务器布置
猪八戒软件开发一般多少钱
数据库结构学习视频
广州做政府软件开发公司
网络安全知识答题判断题
手机软件开发待遇
佰伦网络技术有限公司
租服务器上网
办公软件开发就选臻动传媒
为什么黑客入侵数据库但没被发现
软件开发游戏本还是商务本
睿通网络技术服务中心
网络安全与工业
大同软件开发公司招聘
2兆服务器
东莞数据链软件开发费用
查看oracle 数据库
数据库的保存快捷键
中南大学网络安全考试试卷
软件开发部主管年终总结报告