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 拦截器妙用你真的了解吗
Jul 01 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
解析mybatis-plus中的resultMap简单使用
Nov 23 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
Java 超详细讲解IO操作字节流与字符流
Mar 25 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
Java 超详细讲解hashCode方法
Apr 07 Java/Android
Spring IOC容器Bean的作用域及生命周期实例
May 30 Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 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
递归列出所有文件和目录
2006/10/09 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
python通过yield实现数组全排列的方法
2015/03/18 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
医院辞职信范文
2014/01/17 职场文书
企业消防安全制度
2014/02/02 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫
nginx配置之并发频次限制
2022/04/18 Servers