我通常使用基于注释的配置而不是基于 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 中的上下文参数
- WebApplicationInitializer
- JVM 系统参数
- 环境变量