ConditionalOnProperty配置swagger不生效問題及解決
ConditionalOnProperty配置swagger不生效
問題
在正式環(huán)境準備關(guān)閉Swagger,添加了ConditionalOnProperty注解進行配置,結(jié)果發(fā)現(xiàn)怎么也無法關(guān)閉swagger。
問題原因
@EnableSwagger2在多個地方進行了配置,如下:
1)應用程序處進行了配置
@SpringCloudApplication @EnableSwagger2 ?//在應用程序處進行了配置 public class SysApplication { ? ? ? public static void main(String[] args) { ? ? ? ? SpringApplication.run(SysApplication.class,args); ? ? } }
2)swagger處進行了配置
@Configuration @EnableSwagger2 ?//在swagger本身配置處進行了配置 @ConditionalOnProperty(value = "swagger.manenabled", havingValue = "true") public class SwaggerConfig { }
實際在2)處的配置已經(jīng)生效,但由于1)處有配置所以造成這個問題。
解決方案
將1)處的配置關(guān)閉即可。
@ConditionalOnProperty理解和使用
在Spring應用程序開發(fā)的過程中,可能需要根據(jù)配置屬性的存在和值有條件地創(chuàng)建一些bean,@ConditionalOnProperty注解用于僅在環(huán)境屬性存在且具有特定值時才啟用 bean 注冊。
注解源碼
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) @Documented @Conditional({OnPropertyCondition.class}) public @interface ConditionalOnProperty { //獲取對應property名稱的值,與name不可同時使用 String[] value() default {}; //配置屬性名稱的前綴 String prefix() default ""; //配置屬性完整名稱或部分名稱 //可與prefix組合使用,組成完整的配置屬性名稱,與value不可同時使用 String[] name() default {}; //可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置 String havingValue() default ""; //缺少該配置屬性時是否可以加載。如果為true,沒有該配置屬性時也會正常加載;反之則不會生效 boolean matchIfMissing() default false; }
value以及 prefix + name 決定屬性值(Property Value),以下為匹配規(guī)則
解析:假如havingValue為空,
- 屬性值為boolean類型,則屬性值為true 加載該bean,屬性值為false 不加載該bean。
- 如果屬性值不為boolean類型,則有該屬性 則加載bean,沒有該屬性則不加載。
示例
屬性值不是boolean類型的情況
@Bean(name = "emailNotification") @ConditionalOnProperty(prefix = "notification", name = "service") public NotificationSender notificationSender() { return new EmailNotification(); }
如果配置該屬性則加載:
notification.service=email
屬性值為boolean類型
@Bean(name = "emailNotification") @ConditionalOnProperty(prefix = "notification", name = "enable") public NotificationSender notificationSender() { return new EmailNotification(); }
如果配置為true則加載
notification.enable=true
如果缺失或為false則不加載
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式
這篇文章主要介紹了windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04java使用ArrayList實現(xiàn)斗地主(無序版)
這篇文章主要為大家詳細介紹了java使用ArrayList實現(xiàn)斗地主,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-03-03解決fcitx輸入法在IDEA中輸入法候選框無法跟隨光標移動的問題
這篇文章主要介紹了解決fcitx輸入法在Intellij IDEA開發(fā)工具中輸入法候選框無法跟隨光標移動的問題,代碼簡單易懂對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Android中PreferenceActivity使用詳解
本文主要介紹了Android中PreferenceActivity使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Java并發(fā)編程之Semaphore(信號量)詳解及實例
這篇文章主要介紹了Java并發(fā)編程之Semaphore(信號量)詳解及實例的相關(guān)資料,需要的朋友可以參考下2017-06-06