如何以编程方式创建Spring上下文时设置活动配置文件?

时间:2016-10-26 17:26:27

标签: spring programmatically

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。

2 个答案:

答案 0 :(得分:8)

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

final AnnotationConfigApplicationContext appContext =  new AnnotationConfigApplicationContext();
appContext.getEnvironment().setActiveProfiles( "myProfile" );
appContext.register( com.initech.ReleaserConfig.class );
appContext.refresh();

答案 1 :(得分:0)

如果您希望 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();