覆盖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” 。