項目啟動報錯:Redis health check failed


最近是重新開發整個項目,在上線測試的時候發現這個問題。

項目環境:SpringBoot2.x+Consul+Redission+Maven

報錯的信息如下:

o.s.b.a.redis.RedisHealthIndicator - Redis health check failed
org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

項目中引用了健康檢查

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

通過spring-boot-actuator-autoconfigure:2.1.13.RELEASE的jar包找到了源碼

源代碼如下:

@Configuration
@ConditionalOnClass(RedisConnectionFactory.class)
@ConditionalOnBean(RedisConnectionFactory.class)
@ConditionalOnEnabledHealthIndicator("redis")
@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class)
@AutoConfigureAfter({ RedisAutoConfiguration.class, RedisReactiveHealthIndicatorAutoConfiguration.class })
public class RedisHealthIndicatorAutoConfiguration
		extends CompositeHealthIndicatorConfiguration<RedisHealthIndicator, RedisConnectionFactory> {

	private final Map<String, RedisConnectionFactory> redisConnectionFactories;

	public RedisHealthIndicatorAutoConfiguration(Map<String, RedisConnectionFactory> redisConnectionFactories) {
		this.redisConnectionFactories = redisConnectionFactories;
	}

	@Bean
	@ConditionalOnMissingBean(name = "redisHealthIndicator")
	public HealthIndicator redisHealthIndicator() {
		return createHealthIndicator(this.redisConnectionFactories);
	}

}

解決方法1:

通過@ConditionalOnEnabledHealthIndicator可以知道解決辦法,在配置文件中禁用redis檢查

management:
  health:
    redis:       ---禁用redis檢查
#    defaults:   ---也可以禁用,不推薦
      enabled: false

解決方法2:

查看源碼發現RedisHealthIndicator繼承AbstractHealthIndicator,AbstractHealthIndicator實現了HealthIndicator接口。我們可以通過自定義配置來解決。

@Configuration
public class RedisHealthIndicator implements HealthIndicator{

    @Override
    public Health health() {
        return Health.up().build();
    }
}

注意:我們必須要將原有的RedisHealthIndicator類覆蓋,所以class名為RedisHealthIndicator。如果類想另起名則需指定bean名為redisHealthIndicator,否則還是會出現錯誤信息。

最后說下自己遇到的原因吧!屬實有點尷尬。
自己項目上線遇到的問題則是怪自己粗心。只在redisson的配置文件中配置了redis連接,忘記在application.yml配置redis的連接信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM