如果属性不在Spring Boot应用程序文件中,则Sprint Boot 2.0.5 @ConfigurationProperties不会填充列表

时间:2018-10-28 14:05:00

标签: spring-boot

在application.yml中设置属性时,每个属性(包括列表)都将正确填充,否则,如果我创建新文件并通过 @PropertySource 定位目标,则列表为空,单个属性正确>

application.yml

name: test-YAML3
environment: test
servers: 
    - www.abc.test.com
    - www.xyz.test.com    

custom.yml

name: test-YAML2
environment: test
servers: 
    - www.abc.test.com
    - www.xyz.test.com

@ConfigurationProperties

@Component
@ConfigurationProperties
@PropertySource( value = "classpath:application.yml")
//@PropertySource( value = "classpath:custom.yml")
@Validated
@Getter @Setter
public class ServerProperties 
{
      private String name;
      private String environment;
      private List<String> servers = new ArrayList();
}

下面显示填充列表,因为我使用了 application.yml

enter image description here

在下面显示缺少的列表,因为我设置了 custom.yml

enter image description here

有什么建议吗?我有什么想念的吗?谢谢

1 个答案:

答案 0 :(得分:1)

@PropertySource不支持YAML,因此您的YAML被作为属性文件读取。它在您使用application.yml时起作用,不是因为您的@PropertySource,而是因为默认情况下Spring Boot会读取application.yml并且没有进一步的配置。

如果要使用application以外的名称,则可以使用spring.config.name进行更改。例如:

java -jar app.jar --spring.config.name=custom

reference documentation中提供了更多信息。