简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

问题: 如何在application.properties和application.yml中配置String,Date,Object,Map,List类型的属性,并且idea能提示

先写一个Person 类和一个Dog类:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 在properties中配置Person类如下:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 如果是yml的格式如下:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

上图yml中map和list在一行中显示了,如果不想在一行中显示如何处理?如下:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 问题:如果我想将上面配置的属性注入到Person类的一个实例中,怎么处理?每个属性的注入都用@Value么?

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 此时我们就要用到@ConfigurationProperties

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 加个controller测试下:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 此外ConfigurationProperties 搭配Validated注解一起使用,可以进行特殊校验:


简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别





问题:我们设置端口号时,输入server这个词后就会有提示,如:server.port等,如果我也想要设置person的时候有提示怎么处理?

加入依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
此时修改配置看看:(注意Person类上的注解不能去掉:@ConfigurationProperties(prefix = "person"))

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

问题:person类的配置太多了,写在主配置文件中,不适合,如果我要迁移到一个叫person.propties的文件中,然后使用@ConfigurationProperties(prefix = "person"))该

注解依然能够给Person类注入属性,如何实现:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 此时需要用到@PropertySource

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 此时测试下:


简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

@ImportResource注解的用法,用来注入appliaction相关的配置,如bean.xml

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

结果:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别

 但目前我们都会用如下方式替代:

简述application.properties和application.yml 以及 @ConfigurationProperties 和@PropertySource @Value 和@ImportResource的用法,区别