[英]Springboot @ConfigurationProperties load list from yaml not working
I want to load list of string from yaml file but the list is empty on my test 我想从yaml文件中加载字符串列表,但测试中该列表为空
when i debug i see the list is empty 当我调试时,我看到列表为空
Here is yaml application-reasons-mapping.yml 这是yaml application-reasons-mapping.yml
credit-decision-reasons:
- reason-code: 'D0001'
description: reason 1
- reason-code: '00002'
description: reason 2
- reason-code: '00003'
description: reason 3
- reason-code: '00004'
description: reason 5
Configuration file 配置文件
@Data
@Configuration
@EnableConfigurationProperties(CreditDecisionReasonsMappingProperties.CreditDecisionReasonMappingProperties.class)
@Profile("reasons-mapping")
public class CreditDecisionReasonsMappingProperties {
private List<CreditDecisionReasonMappingProperties> creditDecisionReasons = new ArrayList<>();
@Data
@ConfigurationProperties("credit-decision-reasons")
public static class CreditDecisionReasonMappingProperties {
private String reasonCode;
private String description;
}
}
Test file 测试文件
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles("reasons-mapping")
class CreditDecisionReasonsMappingPropertiesTest {
@Autowired
private CreditDecisionReasonsMappingProperties creditDecisionReasonsMappingProperties;
@Test
public void testCreditDecisionReasonsMapping_loading_succesfully() {
System.out.println(creditDecisionReasonsMappingProperties.getCreditDecisionReasons().get(0).getReasonCode());
assertTrue(creditDecisionReasonsMappingProperties.getCreditDecisionReasons().get(0).getReasonCode().equals("0001"));
}
}
There are couple of mistakes in the above approach, which need some changes in yaml file and as well as code 上面的方法有几个错误,需要对yaml文件和代码进行一些更改
1) Properties in yaml file are wrong indented, they need outer class name as root which is prefix in @ConfigurationProperties
annotation 1)yaml文件中的属性缩进错误,它们需要外部类名作为根,这是
@ConfigurationProperties
批注中的前缀
credit-decision-reasons-mapping-properties:
credit-decision-reason-mapping-properties:
- reason-code: D0001
description: reason 1
- reason-code: 00002
description: reason 2
- reason-code: 00003
description: reason 3
- reason-code: 00004
description: reason 5
2) Since you have mentioned classes in @EnableConfigurationProperties
annotation all of these class need to be annotated with @ConfigurationProperties
2)由于您在
@EnableConfigurationProperties
注释中提到了类, @EnableConfigurationProperties
所有这些类都需要使用@ConfigurationProperties
进行注释
3) ArrayList
should need to be matched with sub property name in yaml file 3)
ArrayList
应该与yaml文件中的子属性名称匹配
@Data
@Configuration
@EnableConfigurationProperties(CreditDecisionReasonsMappingProperties.
CreditDecisionReasonMappingProperties.class)
@ConfigurationProperties("credit-decision-reasons-mapping-properties")
public class CreditDecisionReasonsMappingProperties {
@Getter
private List<CreditDecisionReasonMappingProperties> creditDecisionReasonMappingProperties;
@Data
@ConfigurationProperties
public static class CreditDecisionReasonMappingProperties {
private String reasonCode;
private String description;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.