spring application.yml 来自另一个 属性 的参考列表
spring application.yml reference list from another property
我有 属性 个文件 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'
。如何正确引用它?
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();
这对我有用
您可以进行自己的配置 class,根据需要将值设置为 属性。
请看这个例子:
使用字符串数组时,第一个也是唯一一个元素可以用逗号连接 - 最终结果与列表相同。这意味着您可以像这样设置变量:
config.some.value:元素 1、元素 2、元素 3
然后,在您的配置文件部分,您可以引用配置值,因为它是一个普通字符串:
一些值:${config.some.value}
(恐怕,)你必须这样引用它:
application.yaml:
some.value:
-${config.some.value[0]}
-${config.some.value[1]}
-${config.some.value[2]}
...我预见到问题,当没有 ${config.some.value[2]}
时(列表大小不一致.. -> 解决方法:尝试 "dummy"/"noop")。
参考文献:
解决方案
一种方法是在您的个人资料中使用逗号分隔的列表:
- 应用-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}
此解决方案不需要预先知道列表大小。
说明
描述了此方法有效的原因 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>
.
这是创建具有多个值的 .yml 文件的最佳方式:
spring:
profiles: dev
config:
some:
values: ELEMENT1,ELEMENT2
当我们使用 .yml 文件时,我们建议将每个单词分开。要读取值,请使用:
@Value("${spring.config.some.values}")
private String[] values;
希望对你有所帮助
我有 属性 个文件 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'
。如何正确引用它?
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();
这对我有用
您可以进行自己的配置 class,根据需要将值设置为 属性。
请看这个例子:
使用字符串数组时,第一个也是唯一一个元素可以用逗号连接 - 最终结果与列表相同。这意味着您可以像这样设置变量:
config.some.value:元素 1、元素 2、元素 3
然后,在您的配置文件部分,您可以引用配置值,因为它是一个普通字符串:
一些值:${config.some.value}
(恐怕,)你必须这样引用它:
application.yaml:
some.value:
-${config.some.value[0]}
-${config.some.value[1]}
-${config.some.value[2]}
...我预见到问题,当没有 ${config.some.value[2]}
时(列表大小不一致.. -> 解决方法:尝试 "dummy"/"noop")。
参考文献:
解决方案
一种方法是在您的个人资料中使用逗号分隔的列表:
- 应用-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}
此解决方案不需要预先知道列表大小。
说明
描述了此方法有效的原因 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>
.
这是创建具有多个值的 .yml 文件的最佳方式:
spring:
profiles: dev
config:
some:
values: ELEMENT1,ELEMENT2
当我们使用 .yml 文件时,我们建议将每个单词分开。要读取值,请使用:
@Value("${spring.config.some.values}")
private String[] values;
希望对你有所帮助