@ConditionalOnProperty注解

@ConditionalOnProperty是Spring Boot框架中的一个条件注解,它主要用于根据应用程序配置文件(如application.propertiesapplication.yml)中的属性值来控制Bean的创建和加载。以下是对@ConditionalOnProperty的详细解析:

1. 基本概念

  • 作用:根据配置文件中指定的属性值来决定是否创建或加载特定的Bean。
  • 应用场景:常用于在应用程序启动时根据配置属性来决定是否需要启用某些功能,或根据属性值来选择不同的实现方式。

2. 主要参数

@ConditionalOnProperty(prefix = "spring.datasource.mysql.", name = "url", havingValue = "jdbc:mysql://127.0.0.1:3306/index", matchIfMissing = false)

  • prefix:属性的前缀,用于指定属性的命名空间,默认为空字符串。如果配置项具有前缀,可以通过此参数指定。
  • name:属性的名称,用于指定要检查的属性名。如果同时指定了prefixname,则配置项应为prefix.name的形式。
  • havingValue:属性的期望值,用于指定要检查的属性值。如果配置文件中的属性值与havingValue指定的值匹配,则条件成立。
  • matchIfMissing = false: 如果设置为 false,并且没有名为 “url” 的属性或者它的值不是 “jdbc:mysql://127.0.0.1:3306/index”,则条件不满足,因此不会创建或启用标记了这个条件的 bean。
    如果 matchIfMissing 为 true,但应用程序的配置属性文件中不存在名为 “
    spring.datasource.mysql..url” 的属性,或者该属性的值不是 “jdbc:mysql://127.0.0.1:3306/index”,条件仍然满足,与该条件相关的 bean 会被创建或启用

3. 使用方法

@ConditionalOnProperty注解添加到需要条件控制的Bean定义之前,并通过上述参数指定需要进行判断的属性名称和条件表达式。

4. 示例

假设有一个Spring Boot应用,我们希望通过配置属性来决定是否创建并加载一个名为MyService的Bean。配置和代码示例如下:

application.properties

 

properties复制代码

myapp.feature.enabled=true

Java配置类

 

java复制代码

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@Configuration
public class MyConfiguration {
@Bean
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true", matchIfMissing = true)
public MyService myService() {
return new MyService();
}
}

在这个示例中,@ConditionalOnProperty注解用于myService()方法上,它指定了需要检查的属性名为myapp.feature.enabled,期望值为true,并且在属性缺失时(matchIfMissing=true)也视为条件成立。因此,当application.properties文件中存在myapp.feature.enabled=true时,MyService的Bean将被创建并加载到Spring容器中;如果不存在该属性或属性值不是true,则Bean不会被创建。

5. 注意事项

  • 使用@ConditionalOnProperty时,应确保配置文件的路径和格式正确,并且Spring Boot能够正确加载配置文件。
  • prefixnamehavingValue参数应根据实际需要进行设置,以确保条件判断的准确性。
  • matchIfMissing参数默认为false,根据实际需求进行设置。如果设置为true,则需要注意在没有相应配置属性时可能导致的意外行为。

综上所述,@ConditionalOnProperty是Spring Boot中一个非常有用的条件注解,它可以根据配置文件的属性值来灵活地控制Bean的创建和加载,从而提高应用程序的灵活性和可配置性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/415989.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Guava Cache实现原理及最佳实践

本文内容包括Guava Cache的使用、核心机制的讲解、核心源代码的分析以及最佳实践的说明。 概要 Guava Cache是一款非常优秀本地缓存,使用起来非常灵活,功能也十分强大。Guava Cache说简单点就是一个支持LRU的ConcurrentHashMap,并提供了基于…

4.1 数据分析-excel 基本操作

第四节:数据分析-excel 基本操作 课程目标 学会excel 基本操作 课程内容 数据伪造 产生一份招聘数据 import pandas as pd from faker import Faker import random import numpy as np# 创建一个Faker实例,用于生成假数据,指定中文本地…

不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信

不小心删除了一条短信,或者丢失了所有短信?希望还未破灭,下面介绍如何在 iPhone 上查找和恢复已删除的短信。 短信通常都是非正式和无关紧要的,但短信中可能包含非常重要的信息。因此,如果您删除了一些短信以清理 iPh…

MASt3R:从3D的角度来实现图像匹配(更新中)

Abstract 图像匹配是 3D 视觉中所有性能最佳算法和pipeline的核心组件。 然而,尽管匹配从根本上来说是一个 3D 问题,与相机姿态和场景几何结构有内在联系,但它通常被视为一个 2D 问题。因为匹配的目标是建立 2D 像素字段之间的对应关系&#…

MYSQL:删除指定时间范围内每个电站每天发电数据除最大值以外的记录

有一个需求,需要保留每个电站每一天发电数据的最大值记录,其余删除。 表数据大概长这样: MYSQL 5.7写法:(因为不支持ROW_NUMBER()函数,采用自定义的变量来代替) 首次清理一年内数据&#xff1…

在Postgresql中计算工单的对应的GPS轨迹距离

一、概述 在某个App开发中,要求记录用户的日常轨迹,在用户巡逻设备的时,将记录的轨迹点当做该设备巡逻时候的轨迹。 由于业务逻辑上没有明确的指示人员巡逻工单-GPS位置之间的关系,所以通过时间关系进行轨迹划定。 二、创建测试表…

备受500强企业青睐的安全数据交换系统,到底有什么优势?

网络隔离成为常见的安全手段 网络隔离技术已成为许多企业进行网络安全建设的重要手段之一,党政单位、金融机构、半导体企业、以及能源电力、医疗、生物制药等等行业及领域的企业都会选择方式不一的网络隔离技术来保护自己的网络安全,规避互联网中的网络…

python开发--模板语句

这部分是导航栏部分的代码,由于导航栏在各个页面都需要用,为了提高代码复用率将导航栏部分作为一个模板。 在下面代码图中,红色框部分相当于一个插槽,其他页面,如部门列表、用户列表等将在这个位置展示。 这部分是用户…

全国地市未来产业水平数据集(2008-2023年)

未来产业,作为驱动经济社会高质量发展的核心引擎,是指依托科技创新和模式创新,引领全球新一轮科技革命和产业变革,具有前瞻性、先导性、战略性的新兴产业领域。也是实现生产力大解放,推动生产力质的跃迁并形成新质生产…

路径处理秘籍:Golang path包最佳实践与技巧

路径处理秘籍:Golang path包最佳实践与技巧 引言基本概念和功能path包简介路径的概念:相对路径与绝对路径常见操作函数概览 路径清理和拼接path.Cleanpath.Joinpath.Split 路径提取与处理path.Basepath.Dirpath.Ext处理不同操作系统的路径分隔符 路径匹配…

kubeadm方式升级k8s集群

一、注意事项 升级前最好备份所有组件及数据,例如etcd 不要跨两个大版本进行升级,可能会存在版本bug,如: 1.19.4–>1.20.4 可以 1.19.4–>1.21.4 不可以 跨多个版本的可以逐个版本进行升级。 二、查看当前版本 [rootk8s…

AI时代的程序员:关于创业、应用开发与快速成长的经验分享 | CSDN杭州线下分享

写在前面 上周六参加了一个CSDN组织的线下技术沙龙,做了一个分享,所以本篇内容对当时分享的内容做一个整理,感谢CSDN平台和鲲志大佬的组织,让大家有了一次深入的沟通交流。 先贴照片留念: 本来是想弄个详细点的逐字稿…

【qt】多线程实现倒计时

1.界面设计 设置右边的intvalue从10开始倒计时 2.新建Thread类 新建Thread类,使其继承QThread类,多态重写run函数,相当于线程执行函数 3.重写run函数 重写run函数,让另一个进程每隔1s发出一个信号,主线程使用conne…

大零售时代:开源 AI 智能名片、2+1 链动与 O2O 商城小程序引领融合新趋势

摘要:本文深入探讨了当今零售业态的发展趋势,指出在数据匹配的时代,人依然在零售中发挥着重要作用。通过对大零售理念的阐述,分析了跨行业跨业态融合的必然性,强调了业态融合的指导思想以及实现方式。同时,…

《OpenCV计算机视觉》—— 对图片的各种操作

文章目录 1、安装OpenCV库2、读取、显示、查看图片3、对图片进行切割4、改变图像的大小5、图片打码6、图片组合7、图像运算8、图像加权运算 1、安装OpenCV库 使用pip是最简单、最快捷的安装方式 pip install opencv-python3.4.2还需要安装一个包含了其他一些图像处理算法函数的…

【教程】MySQL数据库学习笔记(六)——数据查询语言DQL(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是新一代面向中小企业…

CRM系统为贷款中介行业插上科技的翅膀

CRM(客户关系管理)系统为贷款中介公司插上了科技的翅膀,极大提升了贷款中介企业的运营效率、客户管理能力和市场竞争力。鑫鹿贷款CRM系统基于互联网、大数据分析、人工智能、云计算等前沿技术,帮助贷款中介公司实现业务流程的自动…

注册安全分析报告:央视网

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

Android 11 (R)AMS Activity内部机制

一、AMS是如何被管理的 如我们在Android 11(R)启动流程中介绍的一样,AMS和ATMS是在SystemServer中被启动的 ActivityTaskManagerService atm mSystemServiceManager.startService(ActivityTaskManagerService.Lifecycle.class).getService(); mActivityManagerSe…