最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ConditionalOnProperty注解的作用和使用方式

 更新時(shí)間:2024年09月26日 08:45:55   作者:碼農(nóng)娟  
在SpringBoot項(xiàng)目開發(fā)中,@ConditionalOnProperty注解允許根據(jù)配置文件中的屬性值來控制配置類是否生效,該注解通過屬性name和havingValue來判斷配置是否注入,如果application.properties中的對應(yīng)屬性值為空或不匹配havingValue設(shè)定值

ConditionalOnProperty注解的作用

在開發(fā)spring boot框架的項(xiàng)目時(shí),需要控制配置類是否生效,這個(gè)時(shí)候就要用到@ConditionalOnProperty注解;

@ConditionalOnProperty注解可以通過配置文件中的屬性值,來判定configuration是否被注入;

源碼

ConditionalOnProperty的源碼

package org.springframework.boot.autoconfigure.condition;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Conditional;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
    String[] value() default {};

    String prefix() default "";

    String[] name() default {};

    String havingValue() default "";

    boolean matchIfMissing() default false;
}

屬性說明

  • value: 獲取對應(yīng)property名稱的值,與name不可同時(shí)使用
  • prefix: 配置項(xiàng)的前綴,可有可無
  • name: property完整名稱或部分名稱(可與prefix組合使用,組成完整的property名稱),與value不可同時(shí)使用  
  • havingValue: 可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,當(dāng)兩個(gè)值相同返回true相同才加載配置
  • matchIfMissing: 如果配置文件中, 沒有該配置項(xiàng), 判斷是否加載BEAN, 默認(rèn)為false。  

用法

通過其兩個(gè)屬性name以及havingValue來實(shí)現(xiàn)的,其中name用來從application.properties中讀取某個(gè)屬性值。

如果該值為空,則返回false; 如果值不為空,則將該值與havingValue指定的值進(jìn)行比較,

如果一樣則返回true;否則返回false。 如果返回值為false,則該configuration不生效;為true則生效。

示例

以數(shù)據(jù)源配置為例:

配置文件信息:

spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主庫數(shù)據(jù)源
            master:
                url: jdbc:mysql://127.0.0.1/test1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: 123456
            # 從庫數(shù)據(jù)源
            slave:
                # 從數(shù)據(jù)源開關(guān)/默認(rèn)關(guān)閉
                enabled: true
                url: jdbc:mysql://127.0.0.1:3306/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false
                username: root
                password: 123456

注解使用:

@Configuration
public class DynamicDataSourceConfig
{
    @Bean
    @ConfigurationProperties("spring.datasource.druid.master")
    public DataSource masterDataSource(DruidProperties druidProperties)
    {
       
    }

    @Bean
    @ConfigurationProperties("spring.datasource.druid.slave")
    @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
    public DataSource slaveDataSource(DruidProperties druidProperties)
    {
       
    }
    .
    .
    .
}
  • 指定了prefix,name,havingValue,因配置項(xiàng)為true,所以會(huì)加載slave庫。

拓展

Spring Boot@Conditional 注解為我們做了細(xì)化,類似的注解共有14個(gè),這些注解都定義在 org.springframework.boot.autoconfigure.condition包下。

以上圈起來的注解:

  • 都可以應(yīng)用在 TYPE 上;(可以理解為:Spring 自動(dòng)掃描的一切類 (@Configuration, @Component, @Service, @Repository, @Controller) 都可以通過添加相應(yīng)的 @ConditionalOnXxxx 來判斷是否加載;)
  • 都可以應(yīng)用在 METHOD 上,所以有 @Bean 標(biāo)記的方法也可以應(yīng)用這些注解;
  • 都使用了 @Conditional 注解來標(biāo)記,OnBeanCondition 等自定義 Condition 也是實(shí)現(xiàn)了 Condition 接口

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot的條件裝配原理及實(shí)現(xiàn)思路

    SpringBoot的條件裝配原理及實(shí)現(xiàn)思路

    SpringBoot的條件裝配是基于@Conditional注解實(shí)現(xiàn)的,下面我們使用原生的@Conditional注解模擬實(shí)現(xiàn)類的條件裝配,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 使用SpringBoot AOP 記錄操作日志、異常日志的過程

    使用SpringBoot AOP 記錄操作日志、異常日志的過程

    這篇文章主要介紹了使用SpringBoot AOP 記錄操作日志、異常日志的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • SpringCloud中Eureka的配置及使用講解

    SpringCloud中Eureka的配置及使用講解

    Eureka?服務(wù)注冊中心,主要用于提供服務(wù)注冊功能,當(dāng)微服務(wù)啟動(dòng)時(shí),會(huì)將自己的服務(wù)注冊到?Eureka?Server,這篇文章主要介紹了SpringCloud中Eureka的配置及詳細(xì)使用,需要的朋友可以參考下
    2023-01-01
  • Java編程—在測試中考慮多態(tài)

    Java編程—在測試中考慮多態(tài)

    這篇文章主要介紹了Java編程—在測試中考慮多態(tài),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot使用Nacos進(jìn)行application.yml配置管理詳解

    SpringBoot使用Nacos進(jìn)行application.yml配置管理詳解

    Nacos是阿里巴巴開源的一個(gè)微服務(wù)配置管理和服務(wù)發(fā)現(xiàn)的解決方案,下面我們來看看在SpringBoot中如何使用Nacos進(jìn)行application.yml配置管理吧
    2025-03-03
  • Spring Reactor基本介紹和案例解析

    Spring Reactor基本介紹和案例解析

    Spring Reactor 是一個(gè)響應(yīng)式編程框架,非常適合類似 MXN 這樣的流程編排系統(tǒng),也是 Java 中異步編程的一種補(bǔ)充,這篇文章主要介紹了Spring Reactor基本介紹和案例解析,需要的朋友可以參考下
    2024-07-07
  • Java中break、continue、return在for循環(huán)中的使用

    Java中break、continue、return在for循環(huán)中的使用

    這篇文章主要介紹了break、continue、return在for循環(huán)中的使用,本文是小編收藏整理的,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Java實(shí)現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)等信息的方法示例

    Java實(shí)現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)等信息的方法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)等信息的方法,涉及java使用第三方j(luò)ar包針對本機(jī)硬件的cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)信息等的讀取相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Java使用多線程處理未知任務(wù)數(shù)的方案介紹

    Java使用多線程處理未知任務(wù)數(shù)的方案介紹

    這篇文章主要為大家詳細(xì)介紹了Java如何使用多線程實(shí)現(xiàn)處理未知任務(wù)數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Java高并發(fā)系統(tǒng)限流算法的實(shí)現(xiàn)

    Java高并發(fā)系統(tǒng)限流算法的實(shí)現(xiàn)

    這篇文章主要介紹了Java高并發(fā)系統(tǒng)限流算法的應(yīng)用,在開發(fā)高并發(fā)系統(tǒng)時(shí)有三把利器用來保護(hù)系統(tǒng):緩存、降級和限流,限流可以認(rèn)為服務(wù)降級的一種,限流是對系統(tǒng)的一種保護(hù)措施,需要的朋友可以參考下
    2022-05-05

最新評論

峡江县| 襄城县| 页游| 师宗县| 无锡市| 乾安县| 昌图县| 桦川县| 马公市| 岳西县| 临沂市| 东兰县| 都江堰市| 玉田县| 石家庄市| 陇西县| 南投县| 南和县| 平乐县| 隆安县| 方城县| 常山县| 江川县| 鸡泽县| 永修县| 崇州市| 新河县| 宜黄县| 丹棱县| 运城市| 合江县| 通渭县| 行唐县| 松阳县| 甘孜| 西林县| 南平市| 桃源县| 交城县| 凌海市| 德格县|