12

tl; dr:如何基于基于注释的配置类创建 Spring 上下文,同时提供活动配置文件?

我正在尝试使用具有使用注释指定的配置的类来创建 Spring 上下文。

org.springframework.context.ApplicationContext context = 
    new org.springframework.context.annotation.AnnotationConfigApplicationContext( com.initech.ReleaserConfig.class );

但是,当它启动时它会崩溃,因为它找不到所需的 bean,但该 bean 确实存在:尽管仅在某个配置文件下"myProfile"

如何指定活动配置文件?我有一种感觉,我需要使用一个org.springframework.context.annotation.AnnotationConfigApplicationContext(org.springframework.beans.factory.support.DefaultListableBeanFactory)构造函数,但我不确定哪个是合适的。


PS-我没有使用 Spring Boot,而是使用 Spring 4.2.4.RELEASE。

4

2 回答 2

14

这应该可以解决问题...

final AnnotationConfigApplicationContext appContext =  new AnnotationConfigApplicationContext();
appContext.getEnvironment().setActiveProfiles( "myProfile" );
appContext.register( com.initech.ReleaserConfig.class );
appContext.refresh();
于 2016-10-26T18:36:30.627 回答
2

如果您希望classpath:resources/application-${spring.profiles.active}.yml正常工作,那么在刷新之前设置系统属性是可行的方法。

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.getEnvironment().getSystemProperties().put(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "dev");
applicationContext.scan("com.sample");
applicationContext.refresh();
于 2020-06-01T19:30:10.687 回答