国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springBoot集成Elasticsearch 報錯 Health check failed的解決

springBoot集成Elasticsearch 報錯 Health check failed的解決

2021-11-15 14:13秒殺無心 Java教程

這篇文章主要介紹了springBoot集成Elasticsearch 報錯 Health check failed的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springBoot集成Elasticsearch 報錯 Health check failed

今天集成Elasticsearch 時啟動報錯

報錯信息如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2018-11-01 20:52:51.310 INFO [hstao-supersearch,,,] 8528 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8009
2018-11-01 20:52:51.314 INFO [hstao-supersearch,,,] 8528 --- [ main] c.i.g.hstaoSupersearchApplication : Started hstaoSupersearchApplication in 32.467 seconds (JVM running for 34.971)
2018-11-01 20:52:53.729 WARN [hstao-supersearch,,,] 8528 --- [on(6)-127.0.0.1] s.b.a.h.ElasticsearchJestHealthIndicator : Health check failed
org.apache.http.conn.HttpHostConnectException: Connect to localhost:9200 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.3.jar:4.5.3]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) ~[httpclient-4.5.3.jar:4.5.3]
at io.searchbox.client.http.JestHttpClient.execute(JestHttpClient.java:50) ~[jest-0.1.7.jar:na]
at org.springframework.boot.actuate.health.ElasticsearchJestHealthIndicator.doHealthCheck(ElasticsearchJestHealthIndicator.java:44) ~[spring-boot-actuator-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:43) ~[spring-boot-actuator-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.actuate.health.CompositeHealthIndicator.health(CompositeHealthIndicator.java:68) [spring-boot-actuator-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.actuate.endpoint.HealthEndpoint.invoke(HealthEndpoint.java:85) [spring-boot-actuator-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.actuate.endpoint.HealthEndpoint.invoke(HealthEndpoint.java:35) [spring-boot-actuator-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.actuate.endpoint.jmx.DataEndpointMBean.getData(DataEndpointMBean.java:46) [spring-boot-actuator-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) [na:1.8.0_121]
at sun.reflect.GeneratedMethodAccessor131.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) [na:1.8.0_121]
at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1252) [na:1.8.0_121]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_121]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [na:1.8.0_121]
at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1246) [na:1.8.0_121]
at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1085) [na:1.8.0_121]
at org.springframework.jmx.export.SpringModelMBean.invoke(SpringModelMBean.java:90) [spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at javax.management.modelmbean.RequiredModelMBean.getAttribute(RequiredModelMBean.java:1562) [na:1.8.0_121]
at org.springframework.jmx.export.SpringModelMBean.getAttribute(SpringModelMBean.java:109) [spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:647) [na:1.8.0_121]
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) [na:1.8.0_121]
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) [na:1.8.0_121]
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) [na:1.8.0_121]
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) [na:1.8.0_121]
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) [na:1.8.0_121]
at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) [na:1.8.0_121]
at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346) [na:1.8.0_121]
at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_121]
at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_121]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_121]
at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_121]
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) [na:1.8.0_121]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) [na:1.8.0_121]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) [na:1.8.0_121]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_121]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) [na:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_121]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_121]
Caused by: java.net.ConnectException: Connection refused: connect

在報錯日志中看到 Connect to localhost:9200 被拒絕,檢查代碼發(fā)現(xiàn)項目中并沒有 localhost:9200 的相關配置項,繼續(xù)看上一步的日志

s.b.a.h.ElasticsearchJestHealthIndicator : Health check failed

可以看到執(zhí)行了es的healthCheck,聯(lián)想到以往集成redis也有healthCheck,便增加如下配置來試圖關掉healthCheck

?
1
management.security.health.elasticsearch.enabled=false

竟然成功了,意外收獲,Mark一下!

SpringBoot集成ElasticSearch出現(xiàn)的異常

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類,可以看下源碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 availableProcessors;
        AvailableProcessorsHolder() {
        }
        synchronized void setAvailableProcessors(int availableProcessors) {
            ObjectUtil.checkPositive(availableProcessors, "availableProcessors");
            // 簡單說明:在項目啟動時,redis自動設置好Netty處理器(availableProcessors就不為0),而此時elasticsearch也啟動,發(fā)現(xiàn)Netty處理器已經(jīng)被設置好了(發(fā)現(xiàn)availableProcessors!=0)然后會報異常。無論哪一個先啟動,都會有判斷去報這樣的異常
            if (this.availableProcessors != 0) {
                // 看到這一句:跟上面報錯的格式是一樣的
                String message = String.format(Locale.ROOT, "availableProcessors is already set to [%d], rejecting [%d]", this.availableProcessors, availableProcessors);
                throw new IllegalStateException(message);
            } else {
                this.availableProcessors = availableProcessors;
            }
        }
        @SuppressForbidden(
            reason = "to obtain default number of available processors"
        )
        synchronized int availableProcessors() {
            if (this.availableProcessors == 0) {
                int availableProcessors = SystemPropertyUtil.getInt("io.netty.availableProcessors", Runtime.getRuntime().availableProcessors());
                this.setAvailableProcessors(availableProcessors);
            }
            return this.availableProcessors;
        }
    }
}

而 Elasticsearch 底層使用了 Netty4Util ,這個類調用NettyRuntime的方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void setAvailableProcessors(final int availableProcessors) {
      // we set this to false in tests to avoid tests that randomly set processors from stepping on each other
    // 而這里就是解決辦法:
      final boolean set = Booleans.parseBoolean(System.getProperty("es.set.netty.runtime.available.processors", "true"));
      if (!set) {
          return;
      }
      /*
       * This can be invoked twice, once from Netty4Transport and another time from Netty4HttpServerTransport; however,
       * Netty4Runtime#availableProcessors forbids settings the number of processors twice so we prevent double invocation here.
       */
      if (isAvailableProcessorsSet.compareAndSet(false, true)) {
          // 看著,回去調用NettyRuntime的setAvailableProcessors
          NettyRuntime.setAvailableProcessors(availableProcessors);
      } else if (availableProcessors != NettyRuntime.availableProcessors()) {
          /*
           * We have previously set the available processors yet either we are trying to set it to a different value now or there is a bug
           * in Netty and our previous value did not take, bail.
           */
          // 看下面的格式跟報錯的格式一樣
          final String message = String.format(
                  Locale.ROOT,
                  "available processors value [%d] did not match current value [%d]",
                  availableProcessors,
                  NettyRuntime.availableProcessors());
          throw new IllegalStateException(message);
      }
  }

3. 解決

在Netty4Util源碼可以看到,配置es.set.netty.runtime.available.processors設置為false就不會去檢查Netty處理器是否配置。

因為得啟動的時候就得去解決沖突,所以設置在 啟動類那

?
1
2
3
4
5
6
7
8
9
10
11
12
@SpringBootApplication
public class XXXApplication {
    @PostConstruct
    public void init() {
        // 解決netty啟動沖突的問題(主要體現(xiàn)在啟動redis和elasticsearch)
        // 可以看Netty4Util.setAvailableProcessors(..)
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }
    public static void main(String[] args) {
        SpringApplication.run(CommunityApplication.class, args);
    }
}

配置在main函數(shù),調用run方法前也可以。

這個問題搞我一天時間,當時是直接copy Netty4Util類的System… , 沒發(fā)現(xiàn)它是getProperty,導致還是出現(xiàn)這個異常,我真的不知道咋解決了。所以要看清楚,這里是setProperty

4. 其他注意點

一定要讓本地的ElasticSearch跟SpringBoot集成的es版本保持一致。否則可能會出錯。特別是一個使用6版本和一個使用7版本。

Maven可以看SpringBoot集成的es版本:

springBoot集成Elasticsearch 報錯 Health check failed的解決

如果需要改就在這里:pom中

?
1
2
3
4
5
    <properties>
        <java.version>1.8</java.version>
        <!--定義elasticsearch版本依賴,保證跟本地版本一致,否則可能出錯-->
<!--        <elasticsearch.version>7.6.2</elasticsearch.version>-->
    </properties>

7版本不太熟,改動也很大,以后有時間再升級。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u012480148/article/details/89919568

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 老妇60一区二区三区 | 天堂网av在线 | 亚洲视频免费观看 | 阿v视频在线| 久久这里只有精品免费 | 韩国三级午夜理伦三级三 | 国产一区二区精品 | 精品国产乱码一区二区三区 | 中文字幕在线观看 | 久久精品久久综合 | 国产女无套免费网站 | 中文字幕在线观看 | 亚洲精品久久久久久久久久久久久 | 欧美 国产精品 | 欧洲精品码一区二区三区免费看 | 久久精品国产77777蜜臀 | 国产一区二区三区在线观看网站 | 日韩高清一区二区 | 日韩免费高清视频 | 精品视频在线播放 | 日韩亚洲| 亚洲午夜精品一区二区三区 | 国产超碰在线观看 | 国产综合中文字幕 | 欧美日韩国产一区二区三区 | 久久精品亚洲成在人线av网址 | av在线一区二区 | www一区二区 | 欧美在线99| 操操操av | 欧美专区在线观看 | 国产欧美日韩 | 久播播av| 免费观看av大片 | 日本天天操| 91免费观看视频 | 亚洲高清在线视频 | 中文av一区 | 少妇一级片免费看 | 二区视频 | 久久久久久一区二区三区 |