4

我对 Spring Platform 有点陌生。我正在实现基于 XML 的 Spring Profiles。

我已经在 web.xml 中声明了一个配置文件,例如

<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>

我想在我的 Java 类中获取活动配置文件值。

这是我的第一次尝试,但由于一些问题它不起作用。

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
String profiles[] = ctx.getEnvironment().getActiveProfiles();
System.out.println(profiles[0]);

它向我显示空值。是否知道如何在 Java 类中激活配置文件?

4

2 回答 2

0

您有一个 web.xml,这意味着您正在将其部署到 servlet 容器。弹簧存储在ApplicationContext里面ServletContext。使用 a ServletContext,您可以获得ApplicationContext如下...

ServletContext sc = request.getSession().getServletContext();
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc);

如果您想在 java 应用程序(主要方法)或测试中设置配置文件,只需为您的配置文件设置系统属性...

java -Dspring.profiles.active="dev" org.hyness.MyClass

您的示例不起作用,因为您正在实例化不使用 web.xml 的第二个上下文。

于 2013-01-03T23:00:34.393 回答
0

创建一个 ApplicationContextAware

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

  public class ApplicationContextProvider implements ApplicationContextAware {
       private static ApplicationContext applicationContext = null;

        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
              / / Assign the ApplicationContext into a static variable
             this.applicationContext = applicationContext;
        }
}

在您的 web.xml 配置为拾取的 spring xml 文件中将其注册为 bean

<bean id="myApplicationContextProvider" class="com.your.package.name.ApplicationContextProvider"></bean>

现在从你的java类中使用

ApplicationContextProvider.getApplicationContext().getEnvironment().getActiveProfile()
于 2013-01-03T22:45:37.653 回答