1. 程式人生 > 其它 >elasticsearch5.6.1.整合springboot 遇到的坑

elasticsearch5.6.1.整合springboot 遇到的坑

[ERROR]Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method ‘elasticsearchClient’ threw exception; nested exception is java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8]

翻譯:[錯誤]未能例項化[org.elasticsearch.client.transport.TransportClient]:工廠方法“elasticsearchClient”引發異常;巢狀異常為java.lang.IllegalStateException:availableProcessors已設定為[8],拒絕[8]

在spring同時整合redis(簡訊服務),ES(elasticsearch,查詢服務)時,會丟擲以上異常

解決方案

方案1.啟動類上加上一段程式碼

System.setProperty("es.set.netty.runtime.available.processors","false");

-----------------------

spring boot 整合redis和elasticsearch遇到的坑
起因是因為我在一個已經集成了redis的spring boot專案上引入了spring-data-elasticsearch包,配好環境之後開始報如下的錯誤。

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]
解決辦法:

@SpringBootApplication

public class SpringBootExampleApplication {

 

public static void main(String[] args) {

System.setProperty("es.set.netty.runtime.available.processors","false");

SpringApplication.run(SpringbootexampleApplication.class, args);

}

}

  

原因:程式的其他地方使用了Netty,這裡指redis。這影響在例項化傳輸客戶端之前初始化處理器的數量。 例項化傳輸客戶端時,我們嘗試初始化處理器的數量。 由於在其他地方使用Netty,因此已經初始化並且Netty會對此進行防範,因此首次例項化會因看到的非法狀態異常而失敗。