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实践之建造者模式
Jun 18 Java/Android
详解Java实践之适配器模式
Jun 18 Java/Android
Java常用工具类汇总 附示例代码
Jun 26 Java/Android
SpringBoot实现异步事件驱动的方法
Jun 28 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
Mar 21 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
SpringBoot Http远程调用的方法
Aug 14 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及Zend Engine的线程安全模型分析
2011/11/10 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
使用Python的内建模块collections的教程
2015/04/28 Python
详解Python中for循环的使用方法
2015/05/14 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
django 外键model的互相读取方法
2018/12/15 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
Python读写锁实现实现代码解析
2020/11/28 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
运动会领导邀请函
2014/01/10 职场文书
爱护公共设施标语
2014/06/24 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书