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 相关文章推荐
springboot如何初始化执行sql语句
Jun 22 Java/Android
基于Java的MathML转图片的方法(示例代码)
Jun 23 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
spring boot项目application.properties文件存放及使用介绍
Jun 30 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
Android自定义ScrollView实现阻尼回弹
Apr 01 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Flutter Navigator 实现路由传递参数
Apr 22 Java/Android
利用正则表达式匹配浮点型数据
May 30 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
PHP闭包实例解析
2014/09/08 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
python实现简单加密解密机制
2019/03/19 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
必须要使用游标的SQL语句有那些
2012/05/07 面试题
领导的自我鉴定
2013/12/28 职场文书
村委会主任先进事迹
2014/01/15 职场文书
违纪开除通知书
2015/04/25 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers