行业资讯 2025年08月6日
0 收藏 0 点赞 210 浏览 2287 个字
摘要 :

文章目录 1.使用@ConditionalOnProperty 2.使用Environment 3.使用Spring Profiles 4.检查其他Bean的存在性 4.1 使用@ConditionalOnBean 4.2 使用@ConditionalOnMissin……




  • 1.使用@ConditionalOnProperty
  • 2.使用Environment
  • 3.使用Spring Profiles
  • 4.检查其他Bean的存在性
    • 4.1 使用@ConditionalOnBean
    • 4.2 使用@ConditionalOnMissingBean

    这篇文章重在说明在Spring Boot应用程序中有条件运行CommandLineRunner Bean的不同方法。

    注:本文基于Spring Boot 3.1.2版本进行测试。

    1.使用@ConditionalOnProperty

    @ConditionalOnProperty注解仅在特定属性存在或具有特定值时创建bean

    在本例中,CommandLineRunner只有在application.propertiesapplication.yml文件中将db.init.enabled属性设置为true时才会执行。

    @Component
    @ConditionalOnProperty(
          name = \"db.init.enabled\",
          havingValue = \"true\",
          matchIfMissing = false
    )
    public class DatabaseInitializer implements CommandLineRunner {
    
      @Override
      public void run(String... args) {
    
          System.out.println(\"This runs when \'db.init.enabled\' property is true.\");
    
      }
    }
    

    application.properties:

    db.init.enabled=true
    

    2.使用Environment

    我们可以使用Environment bean和if语句在程序中检查条件。

    在这个例子中,CommandLineRunner只有在db.init.enabled属性设置为true时才会执行。

    @Component
    public class DatabaseInitializer implements CommandLineRunner {
    
      @Autowired
      private Environment env;
    
      @Override
      public void run(String... args) {
    
          if (\"true\".equals(env.getProperty(\"db.init.enabled\"))) {
              System.out.println(\"This runs when \'db.init.enabled\' property is true.\");
          }
    
      }
    }
    

    3.使用Spring Profiles

    @Profile注解仅在特定Spring配置文件处于活动状态时创建bean。

    在本例中,CommandLineRunner只有在Spring的dev配置文件处于活动状态时才会执行。

    @Component
    @Profile(\"dev\")
    public class DatabaseInitializer implements CommandLineRunner {
    
      @Override
      public void run(String... args) {
    
          System.out.println(\"This runs when profile is to dev.\");
    
      }
    }
    

    application.properties:

    spring.profiles.active=dev
    

    Spring Boot Maven 插件.

     ./mvnw spring-boot:run -Dspring-boot.run.profiles=dev  
    

    java -jar运行:

    java -jar -Dspring.profiles.active=dev target/spring-boot-commandlinerunner-1.0.jar
    

    4.检查其他Bean的存在性

    @ConditionalOnBean和@ConditionalOnMissingBean注解仅在特定bean存在或缺失时创建bean。

    4.1 使用@ConditionalOnBean

    @ConditionalOnBean注解仅在特定bean存在于应用程序上下文中时创建bean。

    在本例中,CommandLineRunner只有在BookController bean存在于应用程序上下文中时才会执行。

    @Component
    @ConditionalOnBean(BookController.class)
    public class DatabaseInitializer implements CommandLineRunner {
    
      @Override
      public void run(String... args) {
    
        //...
    
      }
    }
    

    4.2 使用@ConditionalOnMissingBean

    @ConditionalOnMissingBean注解仅在特定bean不存在于应用程序上下文中时创建bean。

    在本例中,CommandLineRunner只有在BookController bean不存在于应用程序上下文中时才会执行。

    @Component
    @ConditionalOnMissingBean(BookController.class)
    public class DatabaseInitializer implements CommandLineRunner {
    
      @Override
      public void run(String... args) {
    
        //...
    
      }
    }
    

    以上就是如何在SpringBoot中有条件地运行CommandLineRunner Bean的实现方法。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9585.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

515
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号