我通常使用基于注释的配置而不是基于XML的配置来配置applicationContext 。无论如何,我相信他们两个都有相同的优先权。
*回答您的问题,系统变量具有更高的优先级*
从applicationContext获取基于概要文件的bean
@Component
@Profile("dev")
public class DatasourceConfigForDev
现在,个人资料是 dev
注意:如果按原样给出@Profile("!dev")
概要文件,
则该概要文件将排除dev并适用于所有其他概要文件。
<beans profile="dev">
<bean id="DatasourceConfigForDev" class="org.skoolguy.profiles.DatasourceConfigForDev"/>
</beans>
设置配置文件的值:
通过WebApplicationInitializer界面以编程方式
在Web应用程序中,可以使用WebApplicationInitializer以编程方式配置ServletContext
@Configuration
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("spring.profiles.active", "dev");
}
}
通过ConfigurableEnvironment以编程方式
您还可以直接在环境上设置配置文件:
@Autowired
private ConfigurableEnvironment env;
env.setActiveProfiles("dev");
web.xml中的上下文参数
还可以使用上下文参数在Web应用程序的web.xml中激活配置文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-config.xml</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
JVM系统参数
作为参数传递的概要文件名称将在应用程序启动期间激活:
-Dspring.profiles.active=dev
在IDE中,您可以设置应用程序运行时要使用的环境变量和值。以下是Eclipse中的“运行配置”:
任何未指定概要文件的bean都属于“默认”概要文件。
优先顺序为:
- web.xml中的上下文参数
- Web应用程序初始化器
- JVM系统参数
- 环境变量