今天小编给大家分享一下SpringBoot的EnvironmentPostProcessor怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。之前项目中用到了Apollo
配置中心,对接Apollo配置中心后,配置中心的属性就可以在程序中使用了,那么这个是怎么实现的呢?配置中心的属性又是何时加载到程序中的呢?那么我们如果找到了这个是怎么实现的是否就可以 从任何地方加载配置属性
、配置属性的加解密功能呢
?从上图中得知,我们的需求很简单,即我们自己定义的属性需要比配置文件中的优先级更高。
当我们想在Bean中使用配置属性时,那么我们的配置属性必须在Bean实例化之前就放入到Spring到Environment中。即我们的接口需要在 application context refreshed
之前进行调用,而 EnvironmentPostProcessor
正好可以实现这个功能。我们知道在 Spring中获取属性是有优先级的。
比如我们存在如下配置属性 username
那么此时 username
的值是什么呢?此处借用 Apollo
的一张图来说解释一下这个问题。参考链接:https://www.apolloconfig.com/#/zh/design/apollo-designSpring从3.1版本开始增加了ConfigurableEnvironment
和Propert免费云主机域名ySource
:Spring的ApplicationContext会包含一个Environment(实现ConfigurableEnvironment接口)ConfigurableEnvironment自身包含了很多个PropertySourcePropertySource
属性源可以理解为很多个Key – Value的属性配置由上方的原理图可知,key
在最开始出现的PropertySource
中的优先级更高,上面的例子在SpringBoot
中username
的值为huan.fu
。由第二步 获取配置属性的优先级
可知,PropertySource
越靠前越先执行,那么要我们配置生效,就必须放在越前面越好。由上图可知,SpringBoot加载各种配置是通过EnvironmentPostProcessor
来实现的,而具体的实现是ConfigDataEnvironmentPostProcessor
来实现的。那么我们自己编写一个EnvironmentPostProcessor
的实现类,然后在ConfigDataEnvironmentPostProcessor
后执行,并加入到 Environment
中的第一位即可。注意:
1、如果发现程序中日志没有输出,检查是否使用了slf4j
输出日志,此时因为日志系统未初始化无法输出日志。解决方法如下:
1、在 src/main/resources
下新建META-INF/spring.factories
文件2、配置参考上方的 3、编写自定义属性并加入Spring Environment中
提供的解决方案。2、配置没有生效检查检查EnvironmentPostProcessor的优先级,看看是否@Order或者Ordered返回的优先级值不对。看看别的地方是否实现了 EnvironmentPostProcessor或ApplicationContextInitializer或BeanFactoryPostProcessor或BeanDefinitionRegistryPostProcessor等这些接口,在这个里面修改了 PropertySource的顺序。理解 Spring 获取获取属性的顺序 参考 2、获取配置属性的优先级如下代码初始化日志系统以上就是“SpringBoot的EnvironmentPostProcessor怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。
本文小编为大家详细介绍“applemusic资料库不见了如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“applemusic资料库不见了如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 1、我们可以先尝试重启手机,不能…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。