最近在做的微服务遇到一个问题,注册中心跳健康检查机制导致了这个服务启动的失败。
同事获取了下最新的代码,引入了我写的commons组件,启动后就报redis连接不上(缺图)
但是在我这边测试是ok的,看了半天,发现是他连接的注册中心开启了健康检查,而我这边连接的注册中心缺没有开启健康检查,所以在他那边因为引入了Redis相关的jar包导致springBoot在启动时就会实例化heathcheck,
如果注册中心开启了心跳检测,这时会导致heathcheck会调用RedisConnectionFactory去判断连接,因为在该项目中不需要使用redis没有配置redis相关的属性,所以RedisConnectionFactory按照默认属性连接,连接到localhost 6379就会导致连接失败,导致这个服务挂掉。
有几种方式可以解决这样的问题,
1.引入commons.jar时去掉redis autoconfiguration的jar
2.启动类中去除 RedisAutoConfiguration,RedisRepositoriesAutoConfiguration
目前采用的是第一种方式,去除redis引入,但是这里还有一个问题没有了解清楚,因为redis的自动装配问题,我们在application.yml配置spring.redis这样的属性,为什么在heathIndicator里面确实例化出来connectionFactory的实例
commons包引入redis,是因为common中做了一个拦截所有请求,获取用户信息的类,所以引入redis