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
SpringRetry重试框架的具体使用
Jul 25 Java/Android
java泛型通配符详解
Jul 25 Java/Android
springboot 启动如何排除某些bean的注入
Aug 02 Java/Android
JPA 通过Specification如何实现复杂查询
Nov 23 Java/Android
Java9新特性对HTTP2协议支持与非阻塞HTTP API
Mar 16 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
Apr 24 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 Java/Android
Java 异步任务计算FutureTask
Apr 28 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 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
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
python多进程操作实例
2014/11/21 Python
python处理数据,存进hive表的方法
2018/07/04 Python
TensorFlow实现Logistic回归
2018/09/07 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
python实现网页录音效果
2020/10/26 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
2014学雷锋活动总结
2014/03/09 职场文书
教师自我鉴定范文
2014/03/20 职场文书
独生子女证明范本
2015/06/19 职场文书
学生会自荐信
2019/05/16 职场文书