写点什么

SpringBoot- 技术专题 -war 包部署读取外部配置 Yml

发布于: 2020 年 11 月 02 日
SpringBoot-技术专题-war包部署读取外部配置Yml

背景说明

当我们使用 springboot 开发时,有的时候需要打 war 包在外部 tomcat 部署,方便运维人员维护,但是修改配置文件后重新打包给运维的时候,又需要修改一些配置这样还是不方便维护。

springboot 加载 yml 文件时发现需要用到其他的类,YamlPropertiesFactoryBean YamlMapFactoryBean

配置类实现 EnvironmentPostProcessor 接口

  1. EnvironmentPostProcessor 是 springboot 支持动态读取文件的接口,实现 EnvironmentPostProcessor 接口覆写 postProcessEnvironment 方法

  2. 在 postProcessEnvironment 方法实现读取外部配置文件

  3.  使用 YamlPropertiesFactoryBean 来读取 yml 配置文件,getObject()方法可以获取 Properties

首先我把 springboot.yml 配置文件放在 tomcat 目录的 conf 目录下(可以根据自己需求修改目录)

实现 EnvironmentPostProcessor 在方法中完成 yml 配置读取

public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {	@Override	public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {		//tomcat路径		String property = System.getProperty("catalina.home");		String path = property + File.separator + "conf" + File.separator + "myapplication.yml";		//Springboot读取yml配置		YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();		yaml.setResources(new FileSystemResource(path));		MutablePropertySources propertySources = environment.getPropertySources();		propertySources.addFirst(new PropertiesPropertySource("Config", yaml.getObject()));	}}
复制代码

resources 目录下建一个 META-INF 文件目录,在目录中建一个 spring.factories 文件,在文件中配置自己实现的动态读取文件类


org.springframework.boot.env.EnvironmentPostProcessor=com.hzone.demo.config.MyEnvironmentPostProcessor
复制代码


在 pom.xml 中配置 maven 打包时移除配置文件

最后 tomcat 启动,springboot 启动会加载 datasource 配置创建'sqlSessionFactory',正序正常启动就说明这种方式读取 yml 配置文件没有问题。

正常启动,成功加载到了.yml 配置文件。

最后说一下 logback.xml 配置文件丢到外面直接在.yml 配置文件中配置好路径就可以了

参考文章:

https://blog.csdn.net/uknowzxt/article/details/94613582

https://blog.csdn.net/luckyrocks/article/details/79248016


用户头像

我们始于迷惘,终于更高的迷惘. 2020.03.25 加入

一个酷爱计算机技术、健身运动、悬疑推理的极客狂人,大力推荐安利Java官方文档:https://docs.oracle.com/javase/specs/index.html

评论

发布
暂无评论
SpringBoot-技术专题-war包部署读取外部配置Yml