10

我有application-dev.yml内容的属性文件:

spring.profiles: dev
config.some.value:
- ELEMENT1
- ELEMENT2

另一个application-staging.yml内容:

spring.profiles: staging
config.some.value:
- ELEMENT1
- ELEMENT2
- ELEMENT3

所以我基本上不知道列表的大小。当我像这样在 main 中引用此列表时application.yml

some.value: ${config.some.value}

我明白了Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'value'。如何正确引用?

4

6 回答 6

13

解决方案

一种方法是在您的个人资料中使用逗号分隔的列表:

  • 应用程序-dev.yml
spring.profiles: dev
config.some.value: ELEMENT1,ELEMENT2
  • 应用程序-staging.yml
spring.profiles: staging
config.some.value: ELEMENT1,ELEMENT2,ELEMENT3

然后你应该可以在 application.yml 中访问它

some.value: ${config.some.value}

此解决方案不需要预先知道列表大小。

解释

此处描述了这样做的原因。具体来说:

YAML lists are represented as comma-separated values (useful for simple String values) and also as property keys with [index] dereferencers, for example this YAML:
servers:
    - dev.bar.com
    - foo.bar.com
Would be transformed into these properties:
servers=dev.bar.com,foo.bar.com
servers[0]=dev.bar.com
servers[1]=foo.bar.com

特别是这意味着,如果您在 中指定逗号分隔的字符串列表application.yml并将其定义List<String>为值@ConfigurationProperties,spring 配置属性绑定程序会将逗号分隔的字符串列表转换为List<Strings>.

于 2019-02-04T22:16:46.980 回答
0
MyProfile:
SomeValues: 
    - ELEMENT1
    - ELEMENT2
     -ELEMENT3
    - ELEMENT4

---
MyProfile:   
someValues: 
    - ELEMENT1
    - ELEMENT2



@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {


    private List<String> SomeValues= new ArrayList<>();

    // standard getters and setters

}

访问属性

  @Autowired
   private YAMLConfig myConfig;


 private List<String> SomeValues= myConfig.SomeValues();

这对我有用

于 2019-01-31T12:22:18.953 回答
0

您可以创建自己的配置类,根据需要将值设置为该属性。

请看一个这个例子:

Spring Boot 中的@ConfigurationProperties

于 2019-01-31T12:33:18.890 回答
0

使用字符串数组时,第一个也是唯一一个元素可以用逗号连接 - 最终结果与列表相同。这意味着您可以像这样设置变量:

config.some.value:ELEMENT1、ELEMENT2、ELEMENT3

然后,在您的配置文件部分,您可以引用配置值,因为它是一个普通字符串:

someValues:${config.some.value}

于 2019-02-01T01:15:19.403 回答
0

(我担心,)你必须这样引用它:

应用程序.yaml:

some.value:
  -${config.some.value[0]}
  -${config.some.value[1]}
  -${config.some.value[2]}

...我预见到问题,当没有${config.some.value[2]}(列表大小不一致.. -> 解决方法:尝试“虚拟”/“noop”)。

参考:

于 2019-02-01T01:39:57.560 回答
0

这是创建具有多个值的 .yml 文件的最佳方法:

spring:
  profiles: dev
  config:
    some:
      values: ELEMENT1,ELEMENT2

当我们使用 .yml 文件时,我们建议将每个单词分开。要读取值,请使用:

@Value("${spring.config.some.values}")    
private String[] values;

我希望它对你有帮助。

于 2019-02-05T15:26:57.850 回答