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
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
Java集成swagger文档组件
Jun 28 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 Java/Android
Spring Boot接口定义和全局异常统一处理
Apr 20 Java/Android
Android开发手册自定义Switch开关按钮控件
Jun 10 Java/Android
springboot实现string转json json里面带数组
Jun 16 Java/Android
springboot读取resources下文件的方式详解
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
PHP Mysql编程之高级技巧
2008/08/27 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
Python实现ssh批量登录并执行命令
2016/10/25 Python
django站点管理详解
2017/12/12 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python下载的库包存放路径
2020/07/27 Python
python lambda的使用详解
2021/02/26 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
.net笔试题
2014/03/03 面试题
证券期货行业个人的自我评价
2013/12/26 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
出国留学介绍信
2014/01/13 职场文书
创业计划书如何编写
2014/02/06 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
世博会口号
2014/06/20 职场文书
市场营销工作计划书
2014/09/15 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis