前言
@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