当前位置: 首页 > news >正文

如何在Spring Boot中有条件地运行CommandLineRunner Bean

PS 使用 Spring Boot 3.1.2 进行测试

1.使用@ConditionalOnProperty

@ConditionalOnProperty仅当特定属性存在或具有特定值时,注释才会创建 Bean 。

在此示例中,仅当或文件中的CommandLineRunner属性db.init.enabled设置为 true时,才会执行。application.properties``application.yml

数据库初始化器.java

package com.yuanmomo;import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;@Component
@ConditionalOnProperty(name = "db.init.enabled",havingValue = "true",matchIfMissing = false
)
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {System.out.println("This runs when 'db.init.enabled' property is true.");}}

应用程序.属性

db.init.enabled=true

2. 使用环境

Environment我们可以使用bean 和语句以编程方式检查条件if

在此示例中,CommandLineRunner仅当属性db.init.enabled设置为 true 时才会执行。

数据库初始化器.java

package com.yuanmomo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;@Component
public class DatabaseInitializer implements CommandLineRunner {@Autowiredprivate Environment env;@Overridepublic 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

仅当特定的 Spring 配置文件处于活动状态时,注释@Profile才会创建 Bean。

在此示例中,CommandLineRunner仅当 Spring 活动配置文件为 时, 才会执行dev

数据库初始化器.java

package com.yuanmomo;import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;@Component
@Profile("dev")
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {System.out.println("This runs when profile is to dev.");}
}

设置Spring 活动配置文件的不同方法。

应用程序.属性

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是否存在

仅当应用程序上下文中存在或缺少特定 bean 时,@ConditionalOnBean和@ConditionalOnMissingBean注释才会创建 bean。

4.1 使用@ConditionalOnBean

@ConditionalOnBean如果应用程序上下文中存在特定 bean,则注释会创建该 bean 。

在这个例子中,CommandLineRunner只有当BookControllerbean 存在于应用程序上下文中时才会执行。

数据库初始化器.java

package com.mkyong;import com.mkyong.book.BookController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Component;@Component
@ConditionalOnBean(BookController.class)
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {//...}
}

4.2 使用@ConditionalOnMissingBean

@ConditionalOnMissingBean如果应用程序上下文中不存在特定 bean,则注释将创建该 bean 。

在这个例子中,CommandLineRunner只有当BookControllerbean 不存在于应用程序上下文中时才会执行。

数据库初始化器.java

package com.yuanmomo;import com.mkyong.book.BookController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Component;@Component
@ConditionalOnMissingBean(BookController.class)
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {//...}
}

相关文章:

如何在Spring Boot中有条件地运行CommandLineRunner Bean

PS 使用 Spring Boot 3.1.2 进行测试 1.使用ConditionalOnProperty ConditionalOnProperty仅当特定属性存在或具有特定值时,注释才会创建 Bean 。 在此示例中,仅当或文件中的CommandLineRunner属性db.init.enabled设置为 true时,才会执行。…...

边缘自适应粒子滤波(Edge-Adaptive Particle Filter)的MATLAB函数示例,以及相应的讲解

目录 讲解 初始化 预测步骤 观测模拟 权重更新 重采样 状态估计 总结 下面是一个简单的边缘自适应粒子滤波()的函数示例,以及相应的讲解。 程序源代码: function X_est edgeAdaptiveParticleFilter(numParticles, numS…...

一块1T硬盘怎么有sdb1和sdb2

在一块 1TB 硬盘上看到两个分区 sdb1 和 sdb2 是非常常见的现象。硬盘可以被划分为多个分区,每个分区都可以用作不同的目的,如存储不同类型的数据、安装不同的操作系统或为系统不同的功能提供支持。 1. 分区的概念 硬盘可以被划分为多个分区&#xff0…...

Python知识点:如何使用Flink与Python进行实时数据处理

开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何使用Flink与Python进行实时数据处理 Apache Flink是一个流处理框架&#xf…...

Swagger配置且添加小锁(asp.net)(笔记)

此博客是基于 asp.net core web api(.net core3.1)框架进行操作的。 一、安装Swagger包 在 NuGet程序包管理中安装下面的两个包: swagger包:Swashbuckle.AspNetCore swagger包过滤器:Swashbuckle.AspNetCore.Filters 二、swagger注册 在…...

lambda表达式底层实现:反编译LambdaMetafactory + 转储dump + 运行过程 + 反汇编 + 动态指令invokedynamic

一、结论先行 lambda 底层实现机制 1.lambda 表达式的本质:函数式接口的匿名子类的匿名对象 2.lambda表达式是语法糖 语法糖:编码时是lambda简洁的表达式,在字节码期,语法糖会被转换为实际复杂的实现方式,含义不变&am…...

Unity初识+面板介绍

Unity版本使用 小版本号高,出现bug可能性更小;一台电脑可以安装多个版本的Unity,但是需要安装在不同路径;安装Unity时不能有中文路径;Unity项目路径也不要有中文。 Scene面板 相当于拍电影的片场,Unity程…...

【CSS in Depth 2 精译_041】6.4 CSS 中的堆叠上下文与 z-index(上)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结)第二章 相对单位(已完结)第三章 文档流与盒模型(已完结)第四章 Flexbox 布局(已…...

uniapp微信小程序巧用跳转封装鉴权路由

1.这是封装的跳转方法: import store from "../stores/store";function Router(type, url, params) {const NoLoginPage [。。。。。];var queryString Object.keys(params).map((key) > ${key}${params[key]}).join("&");if (!NoLog…...

国外电商系统开发-运维系统开发

因项目运营环境在国外,所以必须将服务器选择国外,加上第一次运营国外项目。在两大趋势下,企业的运营方向必须通过大数据来分析及修正运营方向,加上后期服务器数量日益增多,如何有效的管理众多的服务器及验证运营方向&a…...

基于投影滤波算法的rick合成地震波滤波matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 RICK合成地震波模型 4.2 投影滤波算法原理 5.完整工程文件 1.课题概述 基于投影滤波算法的rick合成地震波滤波matlab仿真。分别通过标准的滤波投影滤波以及卷积滤波投影滤波对合成地震剖面进行滤波…...

【艾思科蓝】机器学习框架终极指南:PyTorch vs TensorFlow vs Keras vs Scikit-learn

第十届建筑、土木与水利工程国际学术会议(ICACHE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看:学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言 1. PyTorch PyTorch的特点 PyTorch的用例 PyTorch的安装 PyTorch代码示例 2. TensorFlow …...

招联金融秋招内推2025

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…...

遮罩解决图片悬浮操作看不到的情况

未悬浮效果 悬浮效果 如果仅仅是添加绝对定位&#xff0c;那么遇到白色图片&#xff0c;就会看不到白色字体。通过遮罩&#xff08;绝对定位透明度&#xff09;就可以解决这个问题。 <script setup> </script><template><div class"box"><…...

IoT网关的主要功能有哪些?天拓四方

在数字化浪潮席卷全球的今天&#xff0c;物联网&#xff08;IoT&#xff09;技术凭借其独特的优势&#xff0c;逐渐在各个领域展现出强大的生命力。而IoT网关&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;其在物联网体系中的作用愈发凸显。 一、数据聚合与预处理…...

继承实现单例模式的探索(一)

前言 之前看到朋友采用继承的方式来实现单例模式&#xff0c;觉得很厉害&#xff0c;随后自己去探索了一番&#xff0c;以前实现单例模式都是把代码内联到具体的类中&#xff0c;这使得工程中每次需要使用单例模式时&#xff0c;都采用拷贝的方式&#xff0c;增加了很多冗余代码…...

【代码实现】opencv 高斯模糊和pytorch 高斯模糊

wiki百科 Gaussian Blur&#xff0c;也叫高斯平滑&#xff0c;是在Adobe Photoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果&#xff0c;通常用它来减少图像噪声以及降低细节层次。 opencv实现 opencv实现高斯滤波有两种方式&#xff0c; 1、是使用自带的cv2…...

python基础语法2

文章目录 1.顺序语句2.条件语句2.1 语法格式 3.缩进与代码块4.空语句 pass5.循环语句5.1 while循环5.2 for循环 5.3 continue与break 1.顺序语句 默认情况下&#xff0c;python的代码都是按照从上到下的顺序依次执行的。 print(hello ) print(world)结果一定是hello world。写…...

linux第一课:下载与安装

这是我的个人复习笔记&#xff0c;草稿箱字太多会卡就发这了&#xff0c;欢迎大家阅读。 Kali Linux&#xff0c;黑客必备神器。跟着我&#xff0c;带你从入门到入狱&#xff01; 第一课&#xff0c;下载与安装。 第一步&#xff1a; 在官网下载Centos镜像&#xff1a;http…...

虚拟机添加共享文件夹后仍无法显示文件

参考: https://blog.csdn.net/Pretender_1205/article/details/134859089 进入/mnt/hgfs目录下执行 sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other/mnt/hgfs 是挂载点&#xff0c;也可以修改为其他挂载点-o allow_other表示允许其他用户(普通用户)访问共…...

告别原生依赖:用Docker在Jetson Nano上封装海康威视相机SDK与Python推理应用

边缘视觉革命&#xff1a;基于Docker的海康威视相机SDK与Python推理应用容器化实践 在工业检测、智能安防和自动驾驶等边缘计算场景中&#xff0c;海康威视工业相机与NVIDIA Jetson Nano的组合已成为经典配置。然而&#xff0c;当团队需要批量部署数十台设备时&#xff0c;传统…...

G-Helper风扇控制完全指南:轻松解决华硕笔记本散热异常问题

G-Helper风扇控制完全指南&#xff1a;轻松解决华硕笔记本散热异常问题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Stri…...

基于n8n的春联生成模型自动化工作流设计

基于n8n的春联生成模型自动化工作流设计 春联作为传统文化的重要组成部分&#xff0c;每年春节都面临着巨大的创作需求。传统手工创作方式效率低下&#xff0c;而AI技术为这一场景带来了全新的解决方案。本文将介绍如何利用n8n构建春联生成模型的自动化工作流&#xff0c;实现从…...

MIL图像库实战:从采集卡配置到Qt应用开发

1. 工业视觉项目开发全流程解析 第一次接触MIL图像库时&#xff0c;我被它强大的硬件抽象能力震撼到了。这个由Matrox开发的图像处理库&#xff0c;就像一位经验丰富的翻译官&#xff0c;把不同品牌采集卡的硬件差异统统屏蔽掉。想象一下&#xff0c;你手里有Basler、AVT、Dals…...

Qwen3.5-9B效果展示:中文新闻事件抽取+时间线生成+关联人物图谱

Qwen3.5-9B效果展示&#xff1a;中文新闻事件抽取时间线生成关联人物图谱 1. 模型核心能力概览 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;在中文处理和多模态理解方面展现出卓越能力。这个模型特别适合处理复杂的文本分析任务&#xff0c;能够从海量信息中提…...

2025届必备的六大AI学术工具解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 有一种人工智能开题报告辅助工具&#xff0c;它借助先进的自然语言处理技术与知识图谱技术构…...

Fay-UE5数字人系统架构深度解析:基于Unreal Engine 5的实时交互虚拟人技术实现

Fay-UE5数字人系统架构深度解析&#xff1a;基于Unreal Engine 5的实时交互虚拟人技术实现 【免费下载链接】fay-ue5 项目地址: https://gitcode.com/gh_mirrors/fa/fay-ue5 Fay-UE5是一个基于Unreal Engine 5引擎构建的高性能数字人解决方案&#xff0c;通过深度集成F…...

RAPTOR编程实战:从算法设计到图形化交互

1. RAPTOR入门&#xff1a;为什么它是最适合初学者的算法工具 第一次接触编程的人往往会被各种语法规则和复杂环境劝退。我教过不少零基础学生&#xff0c;发现他们最头疼的不是算法逻辑本身&#xff0c;而是记不住C的分号或者Python的缩进规则。这时候RAPTOR的优势就显现出来…...

OpenClaw安全指南:gemma-3-12b-it本地化部署的权限管控策略

OpenClaw安全指南&#xff1a;gemma-3-12b-it本地化部署的权限管控策略 1. 为什么需要特别关注OpenClaw的权限管控&#xff1f; 上周我在调试一个自动化文档整理任务时&#xff0c;差点酿成大祸——OpenClaw误将我的工作目录/Documents/ProjectX识别为临时文件夹&#xff0c;…...

中国四大高考工厂是哪四所

根据当前&#xff08;2026年4月&#xff09;可查的权威公开资料&#xff0c;‌“中国四大高考工厂”通常指以下四所中学‌&#xff1a; ‌1、河北衡水中学‌ 2、安徽毛坦厂中学‌ 3、‌河南郸城一高‌&#xff08;即郸城县第一高级中学&#xff09; 4、湖北黄冈中学 ‌ 背…...