- The @Profile annotation lets you indicate that a component is eligible for registration when one or more specified profiles are active. (当一个或多个指定的概要文件处于活动状态时,@Profile注释允许您指示一个组件有资格注册)
- 使用
- If a @Configuration class is marked with @Profile, all of the @Bean methods and @Import annotations associated with that class are bypassed unless one or more of the specified profiles are active. If a @Component or @Configuration class is marked with @Profile({“p1”, “p2”}), that class is not registered or processed unless profiles ‘p1’ or ‘p2’ have been activated. If a given profile is prefixed with the NOT operator (!), the annotated element is registered only if the profile is not active. For example, given @Profile({“p1”, “!p2”}), registration will occur if profile ‘p1’ is active or if profile ‘p2’ is not active.
- 如果@Configuration类被标记为@Profile,那么所有与该类关联的@Bean方法和@Import注释都会被绕过,除非一个或多个指定的概要文件处于活动状态。如果@Component或@Configuration类被标记为@Profile({“p1”, “p2”}),那么这个类不会被注册或处理,除非配置文件’p1’或’p2’已经被激活。如果给定的概要文件以NOT操作符(!)作为前缀,则只有在概要文件未激活时才会注册带注释的元素。例如,给定@Profile({“p1”, “!p2”}),如果配置文件’p1’是激活的,或者配置文件’p2’不是激活的,则会发生注册。
自定义配置文件设置环境
根据不同环境启用不同配置文件
参考
我的测试示例
https://gitee.com/etn/stest/tree/master/properties/src/main/java/io/tan/properties/config/my
不同环境启用不同的接口
今天有个内部需求是:一部分接口在开发阶段使用,在正式环境关闭
- 需求来源:
- 默认数据不明了,需要在开发中调整。
- 为了避免手动操作数据库的麻烦,从而使用接口的形式添加数据。
代码示例
https://gitee.com/etn/stest/tree/master/Profile/src/main/java/io/tan/profile
// 启动指定环境 application.properties
spring.profiles.active=dev
// 指定多个环境
@RestController
@Profile({"prod","dev"})
public class MoreController {
@GetMapping("more")
public String hiMore(){
return "I'm is more";
}
}
// 指定dev环境
@RestController
@Profile("dev")
public class DevController {
@GetMapping("dev")
public String hiDev(){
return "I'm is dev";
}
}
// 指定prod环境
@RestController
@Profile("prod")
public class ProdController {
@GetMapping("prod")
public String hiDev(){
return "I'm is prod";
}
}
测试示例
没有使用@Profile
- 配置文件设置
dev / prod
测试 dev / prod接口
指定 环境为
dev
- 测试 dev / prod接口
```