19

我正在使用 spring 3.1 配置文件,并希望 Spring 在启动时打印出哪些配置文件处于活动状态。例如,日志文件中输出的前几行。

02:59:43,451 INFO  [ContextLoader] Root WebApplicationContext: initialization started
02:59:43,544 INFO  [XmlWebApplicationContext] Refreshing Root WebApplicationContext: startup date [Sun Dec 30 02:59:43 EST 2012]; root of context hierarchy
02:59:43,610 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [spring.xml]
02:59:43,835 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [spring-security.xml]
02:59:43,971 INFO  [SpringSecurityCoreVersion] You are running with Spring Security Core 3.1.3.RELEASE
02:59:43,971 INFO  [SecurityNamespaceHandler] Spring Security 'config' module version is 3.1.3.RELEASE

我想从 spring 中看到的是打印出正在使用的 spring 版本以及当前处于活动状态的配置文件的东西。

如何让 spring 打印出它的版本以及哪些配置文件处于活动状态?

4

3 回答 3

24

实现EnvironmentAware接口

例如

class MyEnvironmentAware implements EnvironmentAware{
    private static Environment env = null;

    @Override
    public void setEnvironment(Environment environment) {
            env = environment;
            //log the stuff you want here
     }
}

将此类标记为 Spring bean

或者

只需注入Environment一个您急切加载的 bean 并从中打印您需要的详细信息

喜欢

@Autowired
Environment env;

在你急切加载的bean中,并打印它

于 2012-12-30T08:32:20.227 回答
12

您可以通过配置 log4j 来获取它,因为该对象会在级别Environment记录配置文件的激活。DEBUG

log4j.logger.org.springframework.core.env=DEBUG, A1

如果A1是您的日志附加程序。不幸的是,在调试级别还有很多其他的东西,所以它不是很好,但是你可以在没有修改源代码的情况下获得活动配置文件。

配置在启动时登录独立的 Swing 应用程序:

58   [main] DEBUG org.springframework.core.env.StandardEnvironment  - Activating profile 'production'

请注意,这是脆弱的,因为它依赖于调试级别的日志,在每次提交到 spring 时都会迅速改变。

于 2012-12-30T09:55:03.467 回答
10
@Value("${spring.profiles.active}")
private String activeProfiles;

这将为您提供一个带有活动配置文件的字符串。

如果您在配置中包含 DefaultFormattingConversionService:

@Bean
public ConversionService conversionService() {
    return new DefaultFormattingConversionService();
}

它将返回一个字符串列表:

@Value("${spring.profiles.active}")
private List<String> activeProfiles;
于 2017-05-18T10:32:30.043 回答