我在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类中激活配置文件?
答案 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的第二个上下文。