官方文档 - Using @Profile

  • 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://blog.csdn.net/u010742049/article/details/99885337

我的测试示例

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

  1. // 启动指定环境 application.properties
  2. spring.profiles.active=dev
  3. // 指定多个环境
  4. @RestController
  5. @Profile({"prod","dev"})
  6. public class MoreController {
  7. @GetMapping("more")
  8. public String hiMore(){
  9. return "I'm is more";
  10. }
  11. }
  12. // 指定dev环境
  13. @RestController
  14. @Profile("dev")
  15. public class DevController {
  16. @GetMapping("dev")
  17. public String hiDev(){
  18. return "I'm is dev";
  19. }
  20. }
  21. // 指定prod环境
  22. @RestController
  23. @Profile("prod")
  24. public class ProdController {
  25. @GetMapping("prod")
  26. public String hiDev(){
  27. return "I'm is prod";
  28. }
  29. }

测试示例

没有使用@Profile

  • 配置文件设置 dev / prod
    • image.png
  • 测试 dev / prod接口

    • image.png
    • image.png

      使用 @Profile

  • 指定 环境为 dev

    • @Profile 配置文件相关 - 图4
  • 测试 dev / prod接口
    • image.png
    • image.png

      配置多个环境

      ```shell @RestController @Profile({“prod”,”dev”}) public class MoreController { @GetMapping(“more”) public String hiMore(){ return “I’m is more”; } }

``` image.png