java - 提取 Spring Boot 用户属性

标签 java spring spring-boot

嘿伙计们,我一直在尝试确定 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/

相关文章:

java - 如何在 JOptionPane 中打印数组?

java - Spring boot 演示项目的问题

spring-boot - 使用 spring boot 属性文件设置 Flyway 'baselineOnMigrate' 和 'baselineVersion'

java - NoSuchBeanDefinitionException : No qualifying bean of type available: expected at least 1 bean which qualifies as autowire candidate

java - OKHTTP缓存: How to rewrite the URL of the response used for caching?

java - 验证 Spring-MVC 命令的最敏捷方法是什么(加速服务器端的验证实现)? ( Spring -MVC)

java - 如何从数组中随机选取一个元素

java - Hibernate 不在 oracle 数据库中创建表

java - 集成测试 Spring SseEmitters

java - Hikari 抛出错误 目标类 org.postgresql.ds.PGPoolingDataSource 上不存在属性 url