Reputation: 9648
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!
Upvotes: 7
Views: 6447
Reputation: 39208
I encountered this error, and for me, the reason was that I was using the incorrect cluster name.
Steps to troubleshoot this error:
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.
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).
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".
Upvotes: 1
Reputation: 787
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:
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/
Upvotes: 2
Reputation: 7395
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
Upvotes: 0
Reputation: 9648
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!
Upvotes: 3