Spring Boot注解全攻略(九):@Profile

前言

@Profile注解在前面的的文章中提到过,这是一个直接用英文翻译比较难理解的词;profile本身的意思是”轮廓”,”侧写”,在编程的其他领域,这个词有针对每个用户的数据存储的意思。而在Spring Boot当中,这个词用于区分不同的环境,如开发环境,测试环境,生产环境。

源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({ProfileCondition.class})
public @interface Profile {
    String[] value();
}
复制代码

该注解可以传入多个字符串,@Profile("prod"), @Profile({"test","master"})都是合法的使用,如果有多个条件,需要同时满足

使用

一般在@Configuration下使用,标注在能返回Bean的类或者方法上,标注的时候填入一个字符串,作为一个场景或者一个区分。

@Configuration
@Profile("dev")
public class MyConfig {
    // your beans here
}
复制代码

当Profile为dev时,上面的代码才会在Spring中注册MyConfig这个类。

在Profile的名字前加”!”,即Profile不激活才注册相应的Bean。

...
@Bean
@Profile("!test") // test不激活才创建该Bean
public MyBean myBean() {
    return new MyBean();
}
...
复制代码

激活环境

最推荐的方式是在计算机中配置环境变量:export SPRING_PROFILES_ACTIVE=prod,这样注册的环境就和计算机绑定在一起。

也可以设置启动参数-Dspring.profiles.active=test
允许同时激活多个环境,如:-Dspring.profiles.active=test,master

也可以在application.yml中配置,或者使用@ActiveProfiles注解,但是它们直接写在了源代码中,失去了灵活性,这里就不展开说了。

prod, dev, test等都是常用的缩写, 属于自己定义的内容而非Spring提供的定义

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享