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目录下(可以根据自己需求修改目录)

实现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

在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

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值