注意 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。
感谢阅读小生文章。祝大家早日富可敌国,实现财富自由。
写文不易 ,一定要 点赞、评论、收藏哦 , 感谢感谢感谢!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)