我刚刚使用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
我在这里和在线上进行了搜索,但无法确定问题出在哪里,我所做的任何更改都无济于事。我知道我一定做错了。
答案 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
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工作方式的参考。
专门针对您的问题,这是一个实现您目标的应用示例:
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