我有属性文件application-dev.yml
,内容:
spring.profiles: dev
config.some.value:
- ELEMENT1
- ELEMENT2
和另一个application-staging.yml
内容:
spring.profiles: staging
config.some.value:
- ELEMENT1
- ELEMENT2
- ELEMENT3
所以我基本上不知道列表的大小。当我像这样在主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'
。如何正确引用?
答案 0 :(得分:1)
解决方案
一种方法是在个人资料中使用逗号分隔的列表:
spring.profiles: dev
config.some.value: ELEMENT1,ELEMENT2
spring.profiles: staging
config.some.value: ELEMENT1,ELEMENT2,ELEMENT3
然后您应该可以在application.yml中访问它
some.value: ${config.some.value}
此解决方案不需要预先知道列表大小。
说明
此操作有效的原因已here进行了说明。 具体来说:
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>
的字符串列表。
答案 1 :(得分: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();
这对我有用
答案 2 :(得分:0)
答案 3 :(得分:0)
使用String数组时,第一个也是唯一的元素可以用逗号连接-最终结果与列表相同。这意味着您可以这样设置变量:
config.some.value:ELEMENT1,ELEMENT2,ELEMENT3
然后,在个人资料部分,您可以引用配置值,因为它是普通字符串:
someValues:$ {config.some.value}
答案 4 :(得分:0)
(我担心,)您必须像这样引用它:
application.yaml:
some.value:
-${config.some.value[0]}
-${config.some.value[1]}
-${config.some.value[2]}
...并且如果没有${config.some.value[2]}
(列表大小不一致..->解决方法:尝试“假” /“空”),我可以预见问题。
参考:
答案 5 :(得分:0)
这是创建具有多个值的.yml文件的最佳方法:
spring:
profiles: dev
config:
some:
values: ELEMENT1,ELEMENT2
当我们使用.yml文件时,建议将每个单词分开。要读取值,请使用:
@Value("${spring.config.some.values}")
private String[] values;
希望对您有帮助。