Spring注解 @Profile : 多环境配置管理

运行时根据激活的Profile决定创建哪个bean

一、配置不同的profile

Spring 3.1只能用在类级别上

假设开发环境(dev)下返回10,生产环境(prod)返回1000。

@Configuration
@Profile("dev")
public class devConfig {
    @Bean
    public int num() {
        return new Integer(10);
    }
}
@Configuration
@Profile("prod")
public class prodConfig {
    @Bean
    public int num (){
        return new Integer(1000);
    }
}

Spring 3.2+ @Profile也可以用在方法上,开发环境下返回10,生产环境下返回1000

@Configuration
public class profileConfig {
    @Bean
    @Profile("prod")
    public int numProd() {
        return new Integer(1000);
    }

    @Bean
    @Profile("dev")
    public int numDev() {
        return new Integer(10);
    }

    @Bean
    public int num() {
        return new Integer(1024);
    }
}

注意:profileConfig 中的num()无论在有没有激活profile或激活了哪个profile,这个方法都会执行的

二、激活

Spring激活Profile需要两个独立的属性:spring.profile.activespring.profile.dafault,前者优先级大于后者,当两者都没设置的话则只会创建没有定义在profile的bean。更为特殊的是可以同时激活多个profile。
有多种方式设置这两个属性:

  1. Web应用上下文参数
<!-- 配置spring的默认profile -->
<context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>dev</param-value>
</context-param>
  1. 生产环境下Tomcat的启动中增加JVM参数

-Dspring.profiles.active="prod"

  1. DispatcherServlet的初始化参数

三、使用profile测试

使用@ActiveProfiles注解来指定激活哪个profile。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ProdConfig.class})
@ActiveProfiles("dev")
public class ProdTest{
    ...
}

标签: Spring, @profile

相关文章推荐: