整合ElasticSearch,出现IllegalStateException: availableProcessors is already set to [12], rejecting [12]

问题:整合es,出现如下异常信息

问题原因:由于es的netty-transport版本冲突导致的,Elasticsearch 和 Redis 底层都使用到了 Netty , 在项目启动时会冲突。

解决方法:

方法一:在启动类main方法中设置

@SpringBootApplication
public class WebApplication {

    public static void main(String[] args) {
        // 解决netty-transport版本冲突
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        SpringApplication.run(WebApplication.class, args);
    }

}

 方法二:springboot启动后候执行

import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;

import javax.annotation.PostConstruct;

@Order(-1)
@Configuration
public class InitConfig {

    @PostConstruct
    void init() {
        // 解决netty-transport版本冲突
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }

}

方法三:springboot启动过程(refresh方法前)执行

首先创建一个class,继承ApplicationContextInitializer接口,并实现方法initialize

@Order(Ordered.HIGHEST_PRECEDENCE)
public class ApplicationInitConfigRunner implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationInitConfigRunner.class);

    private static volatile boolean isInit = false;

    @Override
    public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
        if(!isInit) {
            isInit = true;
            // 解决netty-transport版本冲突
            System.setProperty("es.set.netty.runtime.available.processors", "false");
            LOGGER.info("**************************es config******************************");
            LOGGER.info("es.set.netty.runtime.available.processors:{}", System.getProperty("es.set.netty.runtime.available.processors"));
            LOGGER.info("******************************************************************");
        }
    }
}

1、使用spring.factories方式:

然后在resource下面新建/META-INF/spring.factories文件

org.springframework.context.ApplicationContextInitializer=\com.data.platform.web.config.ApplicationInitConfigRunner

 2、application.yml添加配置方式:
      对于这种方式是通过DelegatingApplicationContextInitializer这个初始化类中的initialize方法获取到application.properties中context.initializer.classes对应的类并执行对应的initialize方法。只需要将实现了ApplicationContextInitializer的类添加到application.properties即可。我们看看DelegatingApplicationContextInitializer是如何加载的。

因此在application.yml文件中添加如下配置:

context:
  initializer:
    classes: com.data.platform.web.config.ApplicationInitConfigRunner

 3、在启动类main方法直接通过addInitializers方法:
 

@SpringBootApplication
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(WebApplication.class);
        springApplication.addInitializers(new ApplicationInitConfigRunner());
        springApplication.run(args);    
    }

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值