SpringBoot使用全局的配置文件,配置文件的名称是固定的

目前推荐这两种命名方式:
1.application.properties
语法结构:key=value
2.application.yml
语法结构: key:空格 value
可以创建将properties配置文件删除,创建yml或yaml文件。

配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动装配好了

java 动态给一个对象添加属性 java动态向yml文件添加属性_spring boot


通过点击pom.xml文件中的Spring-boot-starter-parent,能够看到SpringBoot允许读取三种类型的配置文件。

java 动态给一个对象添加属性 java动态向yml文件添加属性_spring boot_02


原先在properties文件中设置:

java 动态给一个对象添加属性 java动态向yml文件添加属性_赋值_03

现在在yaml文件中进行修改配置:

java 动态给一个对象添加属性 java动态向yml文件添加属性_spring boot_04


properties文件只能保存键值对key=value,yaml文件同样能够做到,与此同时还能够保存【对象】,以及【数组】。

java 动态给一个对象添加属性 java动态向yml文件添加属性_spring boot_05

注:yaml对空格的要求十分严谨。

yaml文件能够注入到我们的配置类中。

yaml给实体类赋值的几种方式:

原始方式:通过在私有属性上@Value(“xxx”)进行赋值。

java 动态给一个对象添加属性 java动态向yml文件添加属性_配置文件_06


通过ymal对实体类进行属性注入:

java 动态给一个对象添加属性 java动态向yml文件添加属性_spring boot_07


解决办法:导入官方文档中的依赖即可,再重启IDEA即可:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

@ConfigurationProperties

@ConfigurationProperties(prefix = “user”)指定yaml配置文件中的映射。
@ConfigurationProperties作用:将配置文件中的配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定,参数prefix = “user”:将配置中的user下面的所有属性一一对应,只有这个组件是容器的组件,才能使用容器提供的ConfigurationProperties功能
@Component (把普通pojo实例化到spring容器中,相当于配置文件中的 )
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

注:此时ymal赋值存在问题。

java 动态给一个对象添加属性 java动态向yml文件添加属性_赋值_08


当属性名对应不一致时,会报错比如上图的bith–bithday。以及2021-01-01是String格式,转Date时也会报错。maps里的value是String格式,但是属性中是Integer格式,这些问题都是错误原因。

java 动态给一个对象添加属性 java动态向yml文件添加属性_配置文件_09

yaml升级玩法

1.name的随机uuid,

2.age的随机数

3.dog名字的占位符取值,当存在user.namdde时,就取该属性值_wang,否则就取旺财_wang。有点类似a>b?a:c。这些都是properties做不到的。

java 动态给一个对象添加属性 java动态向yml文件添加属性_java 动态给一个对象添加属性_10

读取指定properties文件,并赋值

新建zhaoyun.properties文件。

通过@PropertySource(value = “classpath:zhaoyun.properties”)读取指定的配置文件

在属性上加@Value("${name}")同样能够赋值成功。SPEL表达式的方式。

java 动态给一个对象添加属性 java动态向yml文件添加属性_java_11