Springboot打war包部署读取外部配置.yml文件的方法

背景说明

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

在网上找了很多例子但是都是针对.properties文件,读取.yml文件会有问题,当我在看关于springboot加载yml文件时发现需要用到其他的类,YamlPropertiesFactoryBean和YamlMapFactoryBean。下面把读取外部.yml配置文件的方法贴出来。

自定义配置类实现EnvironmentPostProcessor接口

  1. EnvironmentPostProcessor是springboot支持动态读取文件的接口,实现EnvironmentPostProcessor接口覆写postProcessEnvironment方法
  2. 在postProcessEnvironment方法实现读取外部配置文件
  3.  使用YamlPropertiesFactoryBean来读取yml配置文件,getObject()方法可以获取Properties

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

Springboot打war包部署读取外部配置.yml文件的方法_第1张图片

实现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()));
	}
}

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

org.springframework.boot.env.EnvironmentPostProcessor=com.hzone.demo.config.MyEnvironmentPostProcessor

Springboot打war包部署读取外部配置.yml文件的方法_第2张图片

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

Springboot打war包部署读取外部配置.yml文件的方法_第3张图片

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

Springboot打war包部署读取外部配置.yml文件的方法_第4张图片

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

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

参考文章:

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

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

你可能感兴趣的:(springboot,springboot,application.yml,yml,java)