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 相关文章推荐
使用feign服务调用添加Header参数
Jun 23 Java/Android
利用Java设置Word文本框中的文字旋转方向的实现方法
Jun 28 Java/Android
每日六道java新手入门面试题,通往自由的道路
Jun 30 Java/Android
gateway网关接口请求的校验方式
Jul 15 Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 Java/Android
java多态注意项小结
Oct 16 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
Java 关于String字符串原理上的问题
Apr 07 Java/Android
零基础学java之带返回值的方法的定义和调用
Apr 10 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
May 20 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 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
多人战的战术与战略
2020/03/04 星际争霸
农历与西历对照
2006/09/06 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
js切换div css注意的细节
2012/12/10 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
浅谈node的事件机制
2017/10/09 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
加快Vue项目的开发速度的方法
2018/12/12 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
Python中请使用isinstance()判断变量类型
2014/08/25 Python
python写一个md5解密器示例
2018/02/23 Python
Python 解析简单的XML数据
2020/07/24 Python
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
出纳岗位职责范本
2013/12/01 职场文书
学徒工职责
2014/03/06 职场文书
个人安全生产承诺书
2014/05/22 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
责任书范本
2014/08/25 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
Golang数据类型和相互转换
2022/04/12 Golang