首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印由Spring加载的所有配置?

如何打印由Spring加载的所有配置?
EN

Stack Overflow用户
提问于 2017-02-23 10:16:32
回答 3查看 13K关注 0票数 12

我想在屏幕上打印从配置文件中加载的所有属性。我该怎么做呢?我找不到太多关于这方面的信息。

这是因为我可以用参数--spring.config.location加载配置文件,并且我想看看我是否正确地加载了该文件。

我正在寻找一个控制台解决方案,在流程实际开始执行任务之前,我可以打印一些内容。

EN

回答 3

Stack Overflow用户

发布于 2017-02-23 10:41:39

如果您使用Spring,您将得到一个端点,它显示了这些信息。

若要启用此功能,请向项目中添加以下依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

输出应该如下所示:

代码语言:javascript
复制
{
  "profiles": [

  ],
  "bootstrap": {

  },
  "commandLineArgs": {

  },
  "servletContextInitParams": {

  },
  "systemProperties": {
    "jboss.i18n.generate-proxies": "true",
    "java.runtime.name": "Java(TM) SE Runtime Environment",
    "java.protocol.handler.pkgs": "null|org.springframework.boot.loader",
    ...
  },
  "systemEnvironment": {
    "LOCALAPPDATA": "C:\\Windows\\system32\\config\\systemprofile\\AppData\\Local",
    "PROCESSOR_LEVEL": "6",
    "ProgramFiles": "C:\\Program Files",
    "PUBLIC": "C:\\Users\\Public",
    "NUMBER_OF_PROCESSORS": "2",
    "windir": "C:\\Windows",
    ...
  },
  "applicationConfig: [file:.\/application.yml]": {
    "server.port": 11016,
    "server.tomcat.access-log-enabled": true,
    "server.tomcat.access-log-pattern": "%h %l %u %t \"%r\" %>s %b %D",
    "server.tomcat.basedir": ".\/",
    ...
  },
  "applicationConfig: [classpath:\/application.yml]": {
    ...
    "spring.messages.basename": "messages",
    "spring.messages.cache-seconds": -1,
    "spring.messages.encoding": "UTF-8"
  },
  "defaultProperties": {
    "spring.application.name": "bootstrap"
  }
}

它显示了所有已加载的配置文件,包括默认值、系统属性、通过配置服务加载的属性、.。

票数 11
EN

Stack Overflow用户

发布于 2020-04-09 22:27:16

这是帮助吗可以吗?我在Spring Boot问题追踪器上找到的。

我粘贴它以供快速参考,但请记住,最初的作者是桑多-内梅斯

代码语言:javascript
复制
package de.idealo.ecommerce.order.history.config;

import java.util.Arrays;
import java.util.stream.StreamSupport;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.AbstractEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.stereotype.Component;

@Component
public class PropertyLogger  {

    private static final Logger LOGGER = LoggerFactory.getLogger(PropertyLogger.class);

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {
        final Environment env = event.getApplicationContext().getEnvironment();
        LOGGER.info("====== Environment and configuration ======");
        LOGGER.info("Active profiles: {}", Arrays.toString(env.getActiveProfiles()));
        final MutablePropertySources sources = ((AbstractEnvironment) env).getPropertySources();
        StreamSupport.stream(sources.spliterator(), false)
                .filter(ps -> ps instanceof EnumerablePropertySource)
                .map(ps -> ((EnumerablePropertySource) ps).getPropertyNames())
                .flatMap(Arrays::stream)
                .distinct()
                .filter(prop -> !(prop.contains("credentials") || prop.contains("password")))
                .forEach(prop -> LOGGER.info("{}: {}", prop, env.getProperty(prop)));
        LOGGER.info("===========================================");
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-03-17 01:32:48

下面是我的版本,它将它收集到一个映射中,并使用lambdas方法,它避免了转换,因为我使用的是StandardEnvironment而不是Environment。对于较传统的铸造,我使用了::cast方法作为参考。

代码语言:javascript
复制
    final Map<String, Object> collect = env.getPropertySources()
        .stream()
        .parallel()
        .filter(EnumerablePropertySource.class::isInstance)
        .map(EnumerablePropertySource.class::cast)
        .map(EnumerablePropertySource::getPropertyNames)
        .flatMap(Arrays::stream)
        .collect(HashMap::new, (a, e) -> a.put(e, env.getRequiredProperty(e)), Map::putAll);
    System.out.println(collect);

虽然通常我只做最后一部分的调试,但我通常在最后一个平台上结束,并从那里组装我需要的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42412793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档