覆盖
createRootApplicationContext或
createServletApplicationContext对我不起作用。我遇到各种错误,例如非法状态异常和“
$
{spring.profiles.active}”无法解决。挖掘继承树为
AbstractAnnotationConfigDispatcherServletInitializer我设计了以下解决方案:
public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override public void onStartup(ServletContext context) throws ServletException { super.onStartup(context); String activeProfile = System.getProperty("your.profile.property"); if (activeProfile == null) { activeProfile = "prod"; // or whatever you want the default to be } context.setInitParameter("spring.profiles.active", activeProfile); }}现在,您可以创建类似以下的配置类,它将正常工作:
@Configuration@PropertySource( value = "classpath:application-${spring.profiles.active}.properties" )public class MyAppBeans { @Autowired private Environment env; @Bean public Object coolBean() { String initParam = this.env.getProperty("cool.bean.initParam"); ... return coolBean; }}当然,您可以通过VM选项(
-Dyour.profile.property=dev)或容器属性(例如Tomcat容器属性)设置“
your.profile.property” 。



