您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为AbstractAnnotationConfigDispatcherServletInitializer设置可与@PropertySource一起使用的活动配置文件?

为AbstractAnnotationConfigDispatcherServletInitializer设置可与@PropertySource一起使用的活动配置文件?

覆盖createRootApplicationContextcreateServletApplicationContext对我不起作用。我遇到各种错误,例如非法状态异常和“ $ {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” 。

Jave 2022/1/1 18:17:11 有469人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶