简体   繁体   English

来自Yaml的Springboot @ConfigurationProperties加载列表不起作用

[英]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.

相关问题 Springboot @ConfigurationProperties嵌套的yaml属性不会加载 - Springboot @ConfigurationProperties nested yaml properties don't load @ConfigurationProperties 不适用于 .YAML 文件 - @ConfigurationProperties is not working with .YAML files springboot @ConfigurationProperties 列表重新加载不起作用 - springboot @ConfigurationProperties list reload not work Spring 引导:使用@ConfigurationProperties 从 yaml 读取,不使用@Data - Spring Boot: read from yaml using @ConfigurationProperties not working with @Data SpringBoot 2.6.3 未在对象列表上绑定 @ConfigurationProperties - SpringBoot 2.6.3 not binding @ConfigurationProperties on List of Objects Spring Boot:使用 @ConfigurationProperties 从 yaml 读取对象列表始终返回 null - Spring Boot: read list of objects from yaml using @ConfigurationProperties is always returning null Springboot Yaml属性作为地图不起作用 - Springboot yaml properties as map is not working Spring Boot + Yaml + @PropertySource + @ConfigurationProperties + 属性源文件中的列表未注入 - Spring Boot + Yaml + @PropertySource + @ConfigurationProperties + List in Property Source file not injecting SpringBoot没有找到ConfigurationProperties注释 - SpringBoot No ConfigurationProperties annotation found SpringBoot 2 无法绑定 ConfigurationProperties - SpringBoot 2 fails to bing ConfigurationProperties
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM