ConditionalOnProperty配置swagger不生效问题及解决


Posted in Java/Android onJune 14, 2022

ConditionalOnProperty配置swagger不生效

问题

在正式环境准备关闭Swagger,添加了ConditionalOnProperty注解进行配置,结果发现怎么也无法关闭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)处的配置已经生效,但由于1)处有配置所以造成这个问题。

解决方案

将1)处的配置关闭即可。

@ConditionalOnProperty理解和使用

在Spring应用程序开发的过程中,可能需要根据配置属性的存在和值有条件地创建一些bean,@ConditionalOnProperty注解用于仅在环境属性存在且具有特定值时才启用 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),以下为匹配规则

ConditionalOnProperty配置swagger不生效问题及解决

解析:假如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则不加载

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。


Tags in this post...

Java/Android 相关文章推荐
Java实战之用Swing实现通讯录管理系统
Jun 13 Java/Android
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
浅谈resultMap的用法及关联结果集映射
Jun 30 Java/Android
Java实现聊天机器人完善版
Jul 04 Java/Android
java泛型通配符详解
Jul 25 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
Apr 08 Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 Java/Android
带你了解Java中的ForkJoin
Apr 28 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
Java实现贪吃蛇游戏的示例代码
Sep 23 Java/Android
Java异常体系非正常停止和分类
Android开发手册TextInputLayout样式使用示例
Jun 10 #Java/Android
Java实现简单小画板
Android开发EditText禁止输入监听及InputFilter字符过滤
Jun 10 #Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 #Java/Android
Spring JPA 增加字段执行异常问题及解决
Jun 10 #Java/Android
Android开发手册自定义Switch开关按钮控件
Jun 10 #Java/Android
You might like
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
深入密码加salt原理的分析
2013/06/06 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python笔记(2)
2012/10/24 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
Python字典对象实现原理详解
2019/07/01 Python
pandas分区间,算频率的实例
2019/07/04 Python
python实现大学人员管理系统
2019/10/25 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
《月迹》教学反思
2014/02/19 职场文书
搞笑车尾标语
2014/06/23 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
谢师宴答谢词
2015/01/05 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android