四.四.三 测试运行
发现, book 属性也自动填充了,即使 Book 类没有添加 @Component 组件注解。
四.四.四 为 @ConfigurationProperties 添加前缀prefix
SingleInfo 一定提示:
但是我们这个类,前面没有任何前缀啊。 所以用 Book 类进行演示。
四.四.四.一 Book 类添加组件和@ConfigurationProperties 注解
@Component @ConfigurationProperties(prefix = "book")
四.四.四.二 测试 Book类的自动填充
Book 正常的填充。
四.五 @PropertySource 注解进行封装
@ConfigurationProperties 并没有添加关于属性文件的配置信息,它怎么知道,要读取的是哪一个配置文件呢? 发现,我们将 yaml配置信息放置在了 application.yml(SpringBoot的全局配置文件), 答案就在这儿。
@ConfigurationProperties 会默认从全局配置文件中获取值
在 resoruces 下面,添加 myapplication.yml 配置文件,里面放置 四.一 里面的内容,并且从 application.yml 里面移除四.一里面的内容
四.五.一 测试验证,看是否读取了
Book 取消相应的注解。
SingleInfo 保持不变。
运行没有报错,但没有读取到相应的信息。
四.五.二 通过 @PropertySource 进行指定配置文件
通过 @PropertySource 注解指定文件路径时,就需要 用 @Value 一个个进行绑定属性,否则会无法绑定相应的属性。
运行程序, 发现运行成功了,但是会中文乱码。
@PropertySource 注解,支持添加 encoding 来指定编码。
@PropertySource(value = "classpath:myapplication.yml",encoding = "UTF-8")
添加encoding 属性后,继续运行程序:
乱码问题解决。
老蝴蝶为什么不演示 Book 绑定,或者在 SingleInfo 对象里面绑定 book呢? @Value属性,不支持这么绑定。
四.六 @ConfigurationProperties 与 @Value 注解比较
如果我们只需要获取到配置文件中某一个值的话,可以使用 @Value
如果需要获取到多个值的话,还与 JavaBean 进行绑定,最好使用 @ConfigurationProperties 。
本章节的代码放置在 github 上:
https://github.com/yuejianli/springboot/tree/develop/Yaml
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!