@PropertySource 支持 yml 文件

@PropertySource 支持 yml 文件,第1张

项目开发中经常需要加载外部资源文件, @PropertySource 给我们提供了极大的便利。但是 @PropertySource 目前不支持 yml 文件的解析,由于 yml 结构清晰等优点,使用频率也会越来越高。

注意 factory 这个属性,作为解析资源文件的工厂类,默认实现是 DefaultPropertySourceFactory :

我们只需要自定义一个工厂类 ResourceFactory ,继承这个 default 工厂,重写 createPropertySource 即可:

新建测试文件 ssoyml:

结合 @ConfigurationProperties 实现 sso 配置类注入:

test 方法作为测试输出当前信息:

换了新工作,开始用springboot和springcloud 并且配置文件都是用 yml 格式的;
这格式和 json 一样结构清晰可读性高

但是,和 python 一样需要格式缩进非常严格,而我们平时修改配置后,肉感看起来没问题的配置却很容易在启动的时候报配置没找到,就想 idea 是否有 yml 格式检验插件

搜索找了个 SnakeYAML ,安装

并重启 idea后 将yml格式关联到这 SnakeYAML

骚等片刻

现在,只要格式有问题就会有红线提示了

  Spring Boot 官方 提供了两种常用的配置文件格式,分别是 properties 、 YML 格式。相比于 properties 来说, YML 更加年轻,层级也是更加分明。 强烈推荐使用 YML 格式

  Spring Boot项目 启动会扫描以下位置的 applicationproperties 或者 applicationyml 作为默认的配置文件

徒手撕源码

内部类Loader的load方法

getSearchLocations()方法

asResolvedSet()

下面给出优先级 从高到低 的配置文件排列顺序:

以设置应用端口为例 初体验Spring Boot配置文件

properties后缀结尾(applicationproperties)

yml/yaml后缀结尾(applicationyml/applicationyaml)

数字,字符串,布尔,日期

对象、Map

数组

数字,字符串,布尔,日期

对象、Map

数组

@ConfigurationProperties(prefix = "person")详解

标注在类上

标注在方法上

综上所述

  @ConfigurationProperties 注解能够轻松的让配置文件跟实体类绑定在一起。

 值得关注的是: @ConfigurationProperties 这个注解仅仅是支持从 Spring Boot的默认配置文件 中取值,也就是 applicationproperties 、 applicationyml 、 applicationyaml ,那我们如何从自定义配置文件取值呢???

 别着急,有解决办法,那就是再加一个注解: @PropertySource(value = "classpath:custom-profileproperties") ,下面会有对 @PropertySource 注解的介绍。请耐心往下面看。

使用@PropertySource注解

对应配置文件

创建两个配置文件 custom-profileyml、custom-profile1yml ,如下去引入。

我们可以通过控制变量法进行测试,具体过程我这里就不赘述了。

直接说 结论 吧: Spring加载顺序 为 从左到右顺序加载 ,后加载的会 覆盖 先加载的属性值。

另外需要注意的是 : @PropertySource 默认加载 xxxproperties类型 的配置文件,不能加载 YML格式 的配置文件。如何解决呢?下面来解决这一问题

对应配置文件:

编写PropertiesController

扩展功能

applicationyml 主配置文件

application-devyml 开发配置文件

application-prodyml 生产配置文件

application-testyml 测试配置文件

(1)主配置文件:配置激活选项

(2)其他配置文件:指定属于哪个环境(同yml,只不过表现形式是 key=value 的,三个配置文件分别是: application-devproperties , application-prodproperties , application-testproperties )

 无论是使用上述 多文档块 的方式,还是新建 application-testyml 文件,都可以在配置文件中指定 springprofilesactive=test 激活指定的profile。

感谢阅读小生文章。祝大家早日富可敌国,实现财富自由。

写文不易 ,一定要 点赞、评论、收藏哦 , 感谢感谢感谢!!!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13333337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-16
下一篇 2023-07-16

发表评论

登录后才能评论

评论列表(0条)

保存