以编程方式创建 Spring 上下文时如何设置活动配置文件?
How to set the active profile when creating Spring context programmatically?
tl;dr: 如何在提供活动配置文件的同时基于基于注释的配置 class 创建 Spring 上下文?
我正在尝试使用带有注释指定配置的 class 创建 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 引导,但在 Spring 4.2.4.RELEASE.
这应该可以解决问题...
final AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext();
appContext.getEnvironment().setActiveProfiles( "myProfile" );
appContext.register( com.initech.ReleaserConfig.class );
appContext.refresh();
如果您希望 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();
tl;dr: 如何在提供活动配置文件的同时基于基于注释的配置 class 创建 Spring 上下文?
我正在尝试使用带有注释指定配置的 class 创建 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 引导,但在 Spring 4.2.4.RELEASE.
这应该可以解决问题...
final AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext();
appContext.getEnvironment().setActiveProfiles( "myProfile" );
appContext.register( com.initech.ReleaserConfig.class );
appContext.refresh();
如果您希望 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();