条件化配置注解@ConditionalOnProperty

6 篇文章 0 订阅
1 篇文章 0 订阅

问题描述

由于业务原因,公司的login登录包有两个,一个是普通的登录包(简称normal-login),一个是证书登录包(简称abnormal-login,用到https)。代码层面,这两个login包业务代码完全一样,唯一不同的是abnormal-login多了两个配置实例(配置文件方面就不提了,不是重点)。这就导致了,如果normal-login的代码有任何改动(增删接口、代码逻辑修改等)就要同步到abnormal-login包。这样感觉很冗余,而且代码都一样,整个包的代码都在飘黄线,看起来难受。
趁着最近稍微有点时间,就寻思着能不能把这两个包合并了,把证书登陆的两个配置实例做成可配置的。

解决思路

abnormal-login的两个配置实例如下图(这两个类其实就是http->https的处理):
在这里插入图片描述
如果abnormal-login的两个配置实例可以做成配置的就可以满足要求(满足某个条件才会去加载),正好最近看到了一个spring的条件化配置的概念,于是就面向百度开发,找到了一个注解@ConditionalOnProperty(该注解是springboot提供的自动化配置中的条件化配置注解,springboot提供了自动化配置,但并不是所有的配置都是一股脑配置,有些配置在满足某些条件下才会生效),作用如下:截图来源
在这里插入图片描述
@ConditionalOnProperty需要满足配置文件有特定的值才会加载生效配置类(实例)。该注解具体属性如下图:截图来源
在这里插入图片描述

解决方案

一、条件化配置处理

在yml配置文件中新增一个配置,当做证书登陆的开关。
在这里插入图片描述
满足加载配置实例的条件:yml配置文件有myConfig.enableAbnormalLogin配置,且值为true。开启证书登录,启动项目后有日志打印
yml配置
jar启动日志
在这里插入图片描述

关闭证书登录配置,没有该日志打印

二、证书登录开启后的额外问题(kinfe4j地址)

虽然两个配置实例做到了可配置,但是突然发现一个新的问题。那就是eureka上的kinfe4j文档(和swagger是一类东西,接口文档)跳转出了问题,eureka上显示的http的端口,但是点击跳转的时候却访问的是https的端口,导致报错。面向百度,查到了这个:eureka常用配置
eureka接口文档路径
于是修改yml,接口文档为绝对路径(springboot2.X为ip-address;springboot2以下的版本为ipAddress):
在这里插入图片描述
这个端口需要根据是否开启证书登陆而修改,但是原则是获取http端口。如果开启证书登陆,那么该端口需要获取的是myConfig.abnormalPort的端口(myConfig.abnormalPort是http,而server.port变成了https);如果关闭证书登陆,则端口需要获取的是server.port(http)
顺便说下,健康检查也是这样处理。
在这里插入图片描述

三、证书登陆开启后的第二个额外问题(feign调用)

证书登陆开启后,有其他产品的小伙伴反馈说通过feign调用不到login服务的接口了。猜测原因可能是ribbon调用服务端的路径出了问题(port没有切换为abnormalPort),地址栏输入http://ip:8761/eureka/apps,查看eureka实例的消息。
在这里插入图片描述
根据图片,可以猜测eureka调用服务端路径的端口,默认取得是server.port这个配置,但是由于开启证书登陆,server.port变成了https的端口,怪不得其他产品的小伙伴调用不到。可以使用下面配置,手动指定调用路径:
在这里插入图片描述
再次查看eureka实例信息:
在这里插入图片描述
其他产品的小伙伴通过feign调用成功。

小结

1、@ConditionalOnProperty可用在配置类或者配置实例上
2、@ConditionalOnProperty是springboot提供的自动化配置特性的条件配置注解
3、spring.cloud.client.ip-address写法是springboot2.X的版本,springboot2以下的写法为spring.cloud.client.ipAddress
4、eureka调用服务器路径,可以通过eureka.instance.hostname和eureka.instance.nonSecurePort手动指定
萌新发言,不喜勿喷,欢迎大佬指出不当之处!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值