Spring Boot从配置文件加载列表返回空列表

时间:2019-02-04 19:17:37

标签: java spring-boot configuration yaml

我刚刚使用spring初始化程序创建了一个非常基本的spring boot应用程序,并且正在尝试一些事情。我想从yaml配置文件中加载列表,但它始终返回空。

我有一个自定义配置类

@ConfigurationProperties("example-unit")
@EnableConfigurationProperties
public class ConfigurationUnit {

    public List<String> confiList = new ArrayList<>();

    public List<String> getConfiList() {
        return this.confiList;
    }

}

我的主要班级是这样的

@SpringBootApplication
public class DemoApplication {

    static ConfigurationUnit configurationUnit = new ConfigurationUnit();


    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

        List<String> hello = configurationUnit.getConfiList();

        System.out.print("");
    }

}

我已将application.yaml放入资源文件夹中。

example-unit:
  - string1
  - string2
  - hello22

我在这里和在线上进行了搜索,但无法确定问题出在哪里,我所做的任何更改都无济于事。我知道我一定做错了。

4 个答案:

答案 0 :(得分:1)

将您的列表放在 prefix.property 下。就您而言,example-unit.confi-list:。通常为您的媒体资源提供设置者:setConfiList(List<String> strings)。但是由于您已经将其初始化为空数组列表,所以此设置器已过时,this说。还有建议将Enable-annotation添加到Application类:

  

应用程序类应具有@EnableConfigurationProperties批注

答案 1 :(得分:1)

此陈述是错误的static ConfigurationUnit configurationUnit = new ConfigurationUnit();  您不应该创建对象

Spring仅将属性注入到应用程序上下文处理的bean中,并且spring创建使用@ Configuration

注释的类的bean。

ConfigurationUnit

@Configuration
@ConfigurationProperties("example-unit")
public class ConfigurationUnit {

public List<String> confiList;

public List<String> getConfiList() {
    return this.confiList;
    }

 }

DemoApplication 在春季启动主程序中,从applicationcontext中获取bean,并从中获取列表对象

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {

    ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
     ConfigurationUnit unit = context.getBean("configurationUnit"):

    System.out.print(unit. getConfiList());
   }

}

答案 2 :(得分:0)

这里是一个例子:

Application.yml:

example-unit: string1,string2,hello22

ConfigurationUnit.class:

@Component
@PropertySource(value="classpath:application.yml")
public class ConfigurationUnit {

    @Value("#{'${example-unit}'.split(',')}")
    private List<String> confiList;

    public List<String> getConfiList() {
        return confiList;
    }
}

DemoFileLoadApplication.class:

@SpringBootApplication
public class DemoFileLoadApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoFileLoadApplication.class, args);
        ConfigurationUnit configurationUnit = context.getBean(ConfigurationUnit.class);
        System.out.println(configurationUnit.getConfiList());
    }
}

输出:

  

[string1,string2,hello22]

答案 3 :(得分:0)

这里是Spring Bboot Configurtion Binding工作方式的参考。

专门针对您的问题,这是一个实现您目标的应用示例:

  • application.yml
select * from table1  t1
    inner join  (

      select id
      from table1 
      group by  id 
      having count(*) <= 3 

    ) t on t.id  = t1.id 
  • 来源
example-unit:
  confiList:
    - string1
    - string2
    - hello22