【问题标题】:How to bind a string array of properties in Spring?如何在 Spring 中绑定属性的字符串数组?
【发布时间】:2016-12-23 11:47:36
【问题描述】:

我的 application.properties 文件中有以下内容

some.server.url[0]=http://url
some.server.url[1]=http://otherUrl

如何在@Bean 方法中使用@Value 注释来引用属性数组?

我正在使用 Java 6 与 Tomcat 7 和 Spring boot 1.4

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案1】:

    我也遇到了你提到的同样的问题,似乎在 application.properties 上使用索引表单对我也不起作用。

    为了解决这个问题,我做了如下的事情

    some.server.url = url1, url2
    

    然后要获得这些属性,我只需使用 @Value

    @Value("${some.server.url}")
    private String[] urls ;
    

    Spring 自动拆分带有逗号的字符串并返回一个数组AFAIK 这是在Spring 4+中引入的

    如果您不想将 comma (,) 作为分隔符,则必须使用 SpEL,如下所示。

    @Value("#{'${some.server.url}'.split(',')}")
    private List<String> urls;
    

    其中 split() 接受 分隔符

    【讨论】:

    • 如果您更喜欢列表,也可以在之后使用Arrays.asList(urls)
    • 有效。对于 yaml,只需将基于连字符的值放在每一行
    【解决方案2】:

    您可以使用集合。

    @Value("${some.server.url}")
    private List<String> urls;
    

    您还可以使用配置类并将 bean 注入到您的其他类中:

    @Component
    @ConfigurationProperties("some.server")
    public class SomeConfiguration {
        private List<String> url;
    
        public List<String> getUrl() {
            return url;
        }
    
        public void setUrl(List<String> url) {
            this.url = url;
        }
    }
    

    【讨论】:

    • @Bean public List&lt;URI&gt; someUriList(@Value("${some.server.url}") List&lt;String&gt; urlList) 返回java.lang.IllegalArgumentException: Could not resolve placeholder 'some.server.url' in string value "${some.server.url}"
    • 根据您的问题,您的属性为some.url 而不是some.server.url。是这个问题吗?
    • 没有。我已经更新了初始示例以反映我的 application.properties
    • 不知道为什么这对你不起作用,但我还提供了另一种方法,你可以看看它是否更适合你。
    • 将 Java 6 与 Tomcat 7 和 Spring boot 1.4 一起使用。跟这有关系吗?
    【解决方案3】:

    按照这些步骤进行

    1) @Value("${some.server.url}") 私有列表网址;

    2) @ConfigurationProperties("some.server") 公共类 SomeConfiguration {

    3) 你应该有实例变量'urls'的getter和setter

    【讨论】:

    • 我发现接受的答案 (2) 不正确: 1. java 名称必须与属性文件中的名称完全匹配,即 inputQueues[0] 和属性文件中的等等需要一个变量名inputQueues。非常重要:您必须创建一个列表实例,例如 List inputQueues = new ArrayList(); 2.不需要前缀 3.需要注解@ConfigurationProperties 4.需要setter/getter 5.不需要$Value注解。
    猜你喜欢
    • 2017-11-29
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多