ConditionalOnProperty配置swagger不生效問(wèn)題及解決
ConditionalOnProperty配置swagger不生效
問(wèn)題
在正式環(huán)境準(zhǔn)備關(guān)閉Swagger,添加了ConditionalOnProperty注解進(jìn)行配置,結(jié)果發(fā)現(xiàn)怎么也無(wú)法關(guān)閉swagger。
問(wèn)題原因
@EnableSwagger2在多個(gè)地方進(jìn)行了配置,如下:
1)應(yīng)用程序處進(jìn)行了配置
@SpringCloudApplication
@EnableSwagger2 ?//在應(yīng)用程序處進(jìn)行了配置
public class SysApplication {
?
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(SysApplication.class,args);
? ? }
}2)swagger處進(jìn)行了配置
@Configuration
@EnableSwagger2 ?//在swagger本身配置處進(jìn)行了配置
@ConditionalOnProperty(value = "swagger.manenabled", havingValue = "true")
public class SwaggerConfig {
}實(shí)際在2)處的配置已經(jīng)生效,但由于1)處有配置所以造成這個(gè)問(wèn)題。
解決方案
將1)處的配置關(guān)閉即可。
@ConditionalOnProperty理解和使用
在Spring應(yīng)用程序開(kāi)發(fā)的過(guò)程中,可能需要根據(jù)配置屬性的存在和值有條件地創(chuàng)建一些bean,@ConditionalOnProperty注解用于僅在環(huán)境屬性存在且具有特定值時(shí)才啟用 bean 注冊(cè)。
注解源碼
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
//獲取對(duì)應(yīng)property名稱(chēng)的值,與name不可同時(shí)使用
String[] value() default {};
//配置屬性名稱(chēng)的前綴
String prefix() default "";
//配置屬性完整名稱(chēng)或部分名稱(chēng)
//可與prefix組合使用,組成完整的配置屬性名稱(chēng),與value不可同時(shí)使用
String[] name() default {};
//可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置
String havingValue() default "";
//缺少該配置屬性時(shí)是否可以加載。如果為true,沒(méi)有該配置屬性時(shí)也會(huì)正常加載;反之則不會(huì)生效
boolean matchIfMissing() default false;
}value以及 prefix + name 決定屬性值(Property Value),以下為匹配規(guī)則

解析:假如havingValue為空,
- 屬性值為boolean類(lèi)型,則屬性值為true 加載該bean,屬性值為false 不加載該bean。
- 如果屬性值不為boolean類(lèi)型,則有該屬性 則加載bean,沒(méi)有該屬性則不加載。
示例
屬性值不是boolean類(lèi)型的情況
@Bean(name = "emailNotification")
@ConditionalOnProperty(prefix = "notification", name = "service")
public NotificationSender notificationSender() {
return new EmailNotification();
}如果配置該屬性則加載:
notification.service=email
屬性值為boolean類(lèi)型
@Bean(name = "emailNotification")
@ConditionalOnProperty(prefix = "notification", name = "enable")
public NotificationSender notificationSender() {
return new EmailNotification();
}如果配置為true則加載
notification.enable=true
如果缺失或?yàn)閒alse則不加載
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過(guò)原理解析Spring mvc的內(nèi)置編碼過(guò)濾器
這篇文章通過(guò)原理主要給大家解析了關(guān)于Spring mvc的內(nèi)置編碼過(guò)濾器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-09-09
Java?設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解原型模式
原型模式是用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,今天通過(guò)本文給大家介紹下Java 原型設(shè)計(jì)模式,感興趣的朋友一起看看吧2022-04-04
Java中自動(dòng)裝箱、拆箱引起的耗時(shí)詳解
這篇文章主要給大家介紹了關(guān)于Java中自動(dòng)裝箱、拆箱引起的耗時(shí)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
SpringBoot實(shí)現(xiàn)動(dòng)態(tài)端口切換黑魔法
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)端口切換黑魔法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(8)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
Java 帶參數(shù)與帶返回值的方法的定義和調(diào)用
在java中,方法就是用來(lái)完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過(guò)程中,會(huì)包含很多條語(yǔ)句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來(lái)探究一下帶參數(shù)與帶返回值的方法的定義和調(diào)用2022-04-04

