Spring boot

时间:2015-11-05 11:20:11

标签: elasticsearch spring-boot spring-data-elasticsearch

朋友们,我正在使用elastic search开发spring boot项目我在本地计算机上设置了弹性搜索,并且我在弹性搜索中安装了Head插件。我的弹性搜索设置正确显示绿色标志。 我的项目中的application-dev.yml文件如下:

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

弹性搜索服务正在我的机器上运行,但是当我尝试首先保存实体我的代码保存实体在mysql中然后在弹性搜索中使用elastic search repository但是在将实体保存为弹性时会抛出错误:

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]

我也使用9300端口而不是9200,但没有任何效果。我已经尝试了所有方法,但可以找到解决方案,请帮忙!

4 个答案:

答案 0 :(得分:3)

我发现解决方案ES2.0运行不正常所以我重新安装ES1.7.3现在它正在我的情况下工作。 complete details here!

答案 1 :(得分:2)

我遇到了和你一样的问题,也使用了Jhipster。如上所述,一个可能的解决方案是降级你的elasticsearch实例,但如果你不想降级它,这就是它对我有用的东西:

  • 将spring boot更新为lastet版本(> 1.4.0.RC1)
  • 手动配置ElasticsearchTemplate,而不是使用自动配置。

如果您需要更多信息,请查看此帖子: http://ignaciosuay.com/how-to-connect-spring-boot-to-elasticsearch-2-x-x/

答案 2 :(得分:1)

我遇到此错误,对我来说,原因是我使用了不正确的群集名称。

解决此错误的步骤:

  1. 确保Spring Data Elasticsearch与要使用的Elasticsearch版本兼容。项目的自述文件中有一个表,该表将Spring Data Elasticsearch版本与Elasticsearch版本相对应:
    https://github.com/spring-projects/spring-data-elasticsearch#quick-start

    就我而言,我正在使用Spring Data Elasticsearch 3.0.7。根据该表,我需要使用Elasticsearch 5.5.0,但是我发现Spring Data Elasticsearch 3.0.7似乎也与Elasticsearch 5.6.x兼容。

  2. 确保spring.data.elasticsearch.cluster-nodes属性指定您的Elasticsearch集群使用本机Elasticsearch传输协议进行通信的端口。

    默认情况下,Elasticsearch侦听两个端口9200和9300。端口9200用于使用RESTful API进行通信。端口9300用于使用传输协议进行通信:
    https://www.elastic.co/guide/en/elasticsearch/guide/current/_talking_to_elasticsearch.html

    Spring Data Elasticsearch使用的Java客户端期望使用传输协议(默认为9300)进行通信。

  3. 确保spring.data.elasticsearch.cluster-name属性指定正确的群集名称。

    如果您未专门设置此属性,则默认值为“ elasticsearch”。

    您可以使用RESTful API查找Elasticsearch集群名称:
    curl -XGET 'http://localhost:9200/?pretty'

    此命令将打印类似于:

    {
      "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"
    }
    

    请确保将spring.data.elasticsearch.cluster-name属性的值设置为“ cluster_name”所示的相同字符串。

答案 3 :(得分:0)

您似乎正在使用JHipster(如果我可以添加的精彩工具集),它使用

  

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

这仅适用于ElasticSearch BELOW 2.0,因此只需安装ElasticSearch 1.7.3并运行代码

即可