注入SpringBoot自定义配置属性列表

时间:2018-04-24 13:57:26

标签: java spring spring-boot spring-annotations lombok

我试图将我在application.properties文件中创建的自定义配置属性列表注入Controller。我得到@Value("${custom.resource}"我也尝试过注入,如下所示:import lombok.Data; @Configuration @ConfigurationProperties(prefix = "custom") public class ConfigProperties { @Data public static class Resource { private String description; private String category; private String URL; private Boolean PDF; } }

这是我的ConfigurationProperty类:     import org.springframework.boot.context.properties.ConfigurationProperties;     import org.springframework.context.annotation.Configuration;

custom.resource.description[6]=Description
custom.resource.category[6]=the-category
custom.resource.url[6]=somelink.com
custom.resource.pdf[6]=false

custom.resource.description[7]=Description
custom.resource.category[7]=the-category
custom.resource.url[7]=somelink.com
custom.resource.pdf[7]=false

我的getter和setter方法由Lombok生成

这是我如何布置我的属性:

head(TrainWithAppevents_rel4)    
event_id  |device_id |gender |age |group| phone_brand |device_model| numbrand nummodel | app_id    
6   6 1476664663289716480      M  19  M22-      åŽä¸º       Mate 7       29      919  4348659952760821248

我不确定我所做的事情是否是不可能的,如果还有其他方式我应该去做什么或什么。任何指导都会很棒

3 个答案:

答案 0 :(得分:0)

请按以下方式更正您的课程:

@Getter
@Component
@ConfigurationProperties(prefix = "custom")
public class ConfigProperties {

    private final Resource resource = new Resource();

    @Getter
    @Setter
    public static class Resource {

        private List<String> description = new ArrayList<>();
        private List<String> category = new ArrayList<>();
        private List<String> URL = new ArrayList<>();
        private List<Boolean> PDF = new ArrayList<>();
    }
}

The source

答案 1 :(得分:0)

为了解决这个问题,我需要在ConfigProperty类中添加一个ResourceList,并使用spring EL在@Value中按bean名称调用列表

import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration;

import lombok.Data;

@Configuration
@ConfigurationProperties("custom")
@Data
public class ConfigProperties {

    private List<Resource> resourceList;

    @Data
    public static class Resource {

        private String description;

        private String category;

        public String url;

        public Boolean pdf;
    }
}

@Value("#{configProperties.resourceList}")包含在我的Controller类

中 通过查看测试中的应用程序上下文bean名称

,有人想知道我这样做了

答案 2 :(得分:0)

我正在使用许多前缀来分隔mi配置属性,如Guide to @ConfigurationProperties所述(恕我直言,这很优雅)。

遵循here中描述的官方文档。您需要将属性文件更改为:

custom.resource[6].description=Description
custom.resource[6].category=the-category
custom.resource[6].url=somelink.com
custom.resource[6].pdf=false

custom.resource[7].description=Description
custom.resource[7].category=the-category
custom.resource[7].url=somelink.com
custom.resource[7].pdf=false

还需要创建一个POJO来管理信息,如下所示:

public class Resource {
    private String description;
    private String category;
    private String url
    private boolean pdf

    /**
    * Setters and getters
    */
}

最后添加该类以正确管理Configuration属性:

@Configuration
@PropertySource("classpath:config.properties")
public class ConfigProperties {

    private final List<Resource> resources = new ArrayList<>();

    @Bean
    @ConfigurationProperties(prefix = "custom.resource")
    public List<Resource> resources() {
        return this.resources;
    }
}

使用示例:

@Autowired
private ConfigProperties config;

@Override
public void run(String... args) throws Exception {
    for (Resource resource : config.resources()) {
        // More lines of code
    }
}