弹簧轮廓

时间:2013-01-03 22:28:03

标签: java spring profile

我在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]);

它显示我的null值。是否有任何想法如何在Java类中激活配置文件?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

您有一个web.xml,这意味着您要将其部署到servlet容器。 Spring将ApplicationContext存储在ServletContext内。使用ServletContext,您可以获得ApplicationContext,如下所示......

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

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

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

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