嘿伙计们,我一直在尝试确定 Spring boot 中的哪些属性是由用户配置的,还是由 spring 自动配置配置的。我可以列出所有属性,但我不确定如何获取用户声明的属性。
//该方法获取Spring环境中的所有属性
public Properties getSpringEnvironmentProperties() {
Properties props = new Properties();
MutablePropertySources propSrcs = ((AbstractEnvironment) env).getPropertySources();
StreamSupport.stream(propSrcs.spliterator(), false)
.filter(ps -> ps instanceof EnumerablePropertySource)
.map(ps -> ((EnumerablePropertySource) ps).getPropertyNames())
.flatMap(Arrays::<String>stream)
.forEach(propName -> props.setProperty(propName, env.getProperty(propName)));
return props;
}
有没有办法只获取用户在文件中声明的属性,例如:application.properties?
最佳答案
您可以按照以下步骤对复杂属性文件使用 @ConfigurationProperties:
第 1 步:创建存储这些属性的 application.properties
#App
app.menus[0].label=Home
app.menus[0].path=/
app.menus[1].label=Java Core
app.menus[1].path=/javacore
app.menus[2].label=Spring
app.menus[2].path=/spring
第2步:声明java属性类
@ConfigurationProperties("app")
public class AppProperties {
private List<Menu> menus = new ArrayList<Menu>();
//do stuff
}
第 3 步:将属性注入(inject)您的服务
private AppProperties app;
您可以从帖子 Spring boot configuration properties example 中找到工作示例
希望这有帮助!
关于java - 提取 Spring Boot 用户属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312843/