这篇文章主要介绍了ConditionalOnProperty配置swagger不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
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),以下为匹配规则
解析:假如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则不加载
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
本文标题为:ConditionalOnProperty配置swagger不生效问题及解决
- Java中的日期时间处理及格式化处理 2023-04-18
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- 深入了解Spring的事务传播机制 2023-06-02
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
- Java实现顺序表的操作详解 2023-05-19
- Springboot整合minio实现文件服务的教程详解 2022-12-03
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
- Spring Security权限想要细化到按钮实现示例 2023-03-07
- JSP页面间传值问题实例简析 2023-08-03
- JSP 制作验证码的实例详解 2023-07-30