springboot启动前修改yml配置,springboot自定义yml文件

  springboot启动前修改yml配置,springboot自定义yml文件

  

目录

前言具体实现实现代码测试源码总结

 

  

前言

记录下跳羚修改阳明海运股份有限公司配置文件后无需重启服务的方式(打包后生效),效果如下:

 

  

具体实现

 

  

实现代码

pom.xml

 

  依赖项依赖项groupIdorg.springframework.boot/groupId工件id spring-boot-starter-web/工件id/依赖项依赖项groupIdorg.projectlombok/groupId工件id lombok/工件id/相关性/相关性应用程序。阳明海运股份有限公司

  #端口号服务器:端口: 31091 spring :配置文件:活动:开发应用程序-开发。阳明海运股份有限公司

  maggieq8324@gmail.comInitializationConfig.java邮政编码:

  导入龙目岛。外部人员。SLF 4j。SLF 4j;导入org。spring框架。靴子。应用程序参数;导入org。spring框架。靴子。应用程序运行程序;导入org。spring框架。刻板印象。组件;导入Java。util。地图;导入Java。util。并发。遗嘱执行人;导入Java。util。并发。scheduledexecutorservice导入Java。util。并发。时间单位;/* * * * @描述弹簧容器初始化完成后进行一些其他初始化操作* @日期2022年3月24日* @版本1.0 */@Slf4j@Componentpublic类初始化配置实现application runner { private static ScheduledExecutorService executorService=executors。newscheduledthreadpool(1);私有静态字符串配置文件;@覆盖公共void运行(应用程序参数应用程序参数)引发异常{ scheduleUpdateConf();} private void scheduleUpdateConf(){ try { Map LHM=ymlutil。loadyaml(应用程序。yml’);profile=(String)ymlutil。getvalbykey(LHM,“春天。简介。活动’);} catch(异常e) { log.error(加载配置文件应用程序。阳明海运股份有限公司异常);} //TODO开启定时刷新内存中配置文件内容log.info(刷新配置文件开始);执行服务。scheduleatfixedrate(initializationconfig : updateconfval,0,10,TimeUnit .秒);log.info(r

  efresh 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目录下

 

  

 

  

源码

GitHub:https://github.com/Maggieq8324/java-learn-demo/tree/master/springboot-dynamic-yml

 

  Gitee:https://gitee.com/maggieq8324/java-learn-demo/tree/master/springboot-dynamic-yml

  

 

  

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行IT的更多内容!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: