None of the configured nodes are available issue with spring boot
Asked Answered
C

4

7

Hi friends i am developing spring boot project with elastic search i have setup elastic search on local machine and i have installed Head plugin in elastic search . My elastic search is setup correctly showing green sign. My application-dev.yml file in my project is as follows:

server:
    port: 8080

liquibase:
    context: dev

spring:
    profiles:
        active: dev
    datasource:
        dataSourceClassName: org.h2.jdbcx.JdbcDataSource
        url: jdbc:h2:mem:jhipster;DB_CLOSE_DELAY=-1
        databaseName:
        serverName:
        username:
        password:

    jpa:
        database-platform: com.aquevix.demo.domain.util.FixedH2Dialect
        database: H2
        openInView: false
        show_sql: true
        generate-ddl: false
        hibernate:
            ddl-auto: none
            naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
        properties:
            hibernate.cache.use_second_level_cache: true
            hibernate.cache.use_query_cache: false
            hibernate.generate_statistics: true
            hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
    data:
        elasticsearch:
            cluster-name: elasticsearch
            cluster-nodes: localhost:9200
    messages:
        cache-seconds: 1
    thymeleaf:
        mode: XHTML
        cache: false
    activemq:
        broker-url: tcp://localhost:61616



metrics:
    jmx.enabled: true
    spark:
        enabled: false
        host: localhost
        port: 9999
    graphite:
        enabled: false
        host: localhost
        port: 2003
        prefix: TestApollo

cache:
    timeToLiveSeconds: 3600
    ehcache:
        maxBytesLocalHeap: 16M

Elastic search service is running on my machine but when i try to save entity first my code save entity in mysql then in elastic search using elastic search repository but on saving entity into elastic it throws error:

Hibernate: insert into EMPLOYEE (id, rollno) values (null, ?)
[ERROR] com.aquevix.demo.aop.logging.LoggingAspect - Exception in com.aquevix.demo.web.rest.EmployeeResource.create() with cause = null
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:298) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:214) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:105) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:94) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:331) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:313) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91) ~[elasticsearch-1.3.2.jar:na]
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65) ~[elasticsearch-1.3.2.jar:na]
        at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:431) ~[spring-data-elasticsearch-1.1.3.RELEASE.jar:na]
        at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:138) ~[spring-data-elasticsearch-1.1.3.RELEASE.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_51]

i have also use 9300 port instead of 9200 but nothing is working. I have tried everything but could find solutions please help!

Candra answered 5/11, 2015 at 11:20 Comment(1)
I'm having the same issue here, also with Elasticsearch 2.x, you should specify it in your question.Weiser
C
3

I have found the solution ES2.0 is not working correctly so i re-install ES1.7.3 now it is working in my case. complete details here!

Candra answered 6/11, 2015 at 4:50 Comment(1)
This part in your link helped me: Note: Do not use 9200 as port if you want to use elasticsearch with java or spring-boot beacuse 9200 port used for http protocol and 9300 use with tcp protocol onlyPotato
K
2

I had the same problem as you, and also using Jhipster too. As mentioned one possible solution is to downgrade your elasticsearch instance but if you don't want to downgrade it, here is what it worked for me:

  • update spring boot to the lastet version (> 1.4.0.RC1)
  • Configure ElasticsearchTemplate manually instead of using autoconfiguration.

Please if you need more information have a look to this post: http://ignaciosuay.com/how-to-connect-spring-boot-to-elasticsearch-2-x-x/

Krebs answered 27/7, 2016 at 11:10 Comment(0)
T
1

I encountered this error, and for me, the reason was that I was using the incorrect cluster name.

Steps to troubleshoot this error:

  1. Make sure that Spring Data Elasticsearch is compatible with the Elasticsearch version that you intend to use. There is a table in the project's README which corresponds Spring Data Elasticsearch versions with Elasticsearch versions:
    https://github.com/spring-projects/spring-data-elasticsearch#quick-start

    In my case, I am using Spring Data Elasticsearch 3.0.7. According to the table, I need to use Elasticsearch 5.5.0, but I have found that Spring Data Elasticsearch 3.0.7 appears to be compatible with Elasticsearch 5.6.x as well.

  2. Make sure that the spring.data.elasticsearch.cluster-nodes property specifies whatever port your Elasticsearch cluster is using for communication using the native Elasticsearch transport protocol.

    By default, Elasticsearch listens on two ports, 9200 and 9300. Port 9200 is for communication using the RESTful API. Port 9300 is for communication using the transport protocol:
    https://www.elastic.co/guide/en/elasticsearch/guide/current/_talking_to_elasticsearch.html

    The Java client that Spring Data Elasticsearch uses expects to communicate using the transport protocol (9300 by default).

  3. Make sure that the spring.data.elasticsearch.cluster-name property specifies the correct cluster name.

    If you do not specifically set this property, then the default is "elasticsearch".

    You can look up the Elasticsearch cluster name using the RESTful API:
    curl -XGET 'http://localhost:9200/?pretty'

    This command will print something similar to:

    {
      "name" : "XXXXXXX",
      "cluster_name" : "some_cluster_name",
      "cluster_uuid" : "XXXXXXXXXXXXXXXXXXXXXX",
      "version" : {
        "number" : "5.6.10",
        "build_hash" : "b727a60",
        "build_date" : "2018-06-06T15:48:34.860Z",
        "build_snapshot" : false,
        "lucene_version" : "6.6.1"
      },
      "tagline" : "You Know, for Search"
    }
    

    Make sure to set the value of the spring.data.elasticsearch.cluster-name property to the same string shown for "cluster_name".

Tonga answered 21/7, 2018 at 20:44 Comment(0)
V
0

You seem to be using JHipster (wonderful toolset if I may add) which uses

org.springframework.boot:spring-boot-starter-data-elasticsearch: -> 1.3.3.RELEASE

This only works with ElasticSearch BELOW 2.0 so just install ElasticSearch 1.7.3 and run your code

Valediction answered 17/5, 2016 at 4:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.