SpringBoot集成ElasticSearch出现的异常

本文讲述了在SpringBoot 2.2.8版本集成ElasticSearch 6.8.10时遇到的Netty冲突问题,由于ElasticSearch和Redis底层都使用Netty,导致启动异常。解决方案是在启动类中通过设置es.set.netty.runtime.available.processors为false避免冲突。同时提醒注意ElasticSearch版本一致性,避免6版和7版混用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 异常

在使用springboot2.2.8+elasticsearch6.8.10时,测试时报错:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchClient' defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]

2. 原因

  • Elasticsearch 和 Redis 底层都使用到了 Netty , 在项目启动时会冲突。

涉及到的类:NettyRuntime,Netty4Util。

  • 查看NettyRuntime类,可以看下源码:
public final class NettyRuntime {
   
    private static final NettyRuntime.AvailableProcessorsHolder holder = new NettyRuntime.AvailableProcessorsHolder();

    public static void setAvailableProcessors(int availableProcessors) {
   
        holder.setAvailableProcessors(availableProcessors);
    }

    public static int availableProcessors() {
   
        return holder.availableProcessors();
    }

    private NettyRuntime() {
   
    }

    static class AvailableProcessorsHolder {
   
        private int avail
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值