使用prod yml在JHipster项目中配置elasticsearch

时间:2016-12-26 13:15:25

标签: java elasticsearch spring-boot jhipster

我有一个使用Jhipter生成器构建的应用程序,它基于Spring Boot。最新版本的Jhipster允许您将Elasticsearch作为选项包含在内,因此我有一个应用程序在开发模式下运行Elasticsearch的嵌入式实例,并以生产模式连接到服务器实例。

当应用程序在开发模式下运行时,它可以很好地连接到嵌入式实例,但如果我尝试连接到外部实例,我在控制台上会出现以下错误:

错误7804 --- [restartedMain] .dersAbstractElasticsearchRepository:无法加载elasticsearch节点:org.elasticsearch.client.transport.NoNodeAvailableException:所有已配置的节点都不可用:[{#transport#-1} {127.0.0.1} {127.0.0.1:9300}]

我的应用程序正在使用 Spring启动版本1.4.0.RELEASE ,并且根据elasticsearch.yml,该应用程序具有 elasticsearch 2.3.5

我的应用程序-prod.yml设置:

spring:
    data:
        elasticsearch:
            cluster-name: 
            cluster-nodes: localhost:9300

默认的ElasticSearchConfiguration是:

@Configuration
public class ElasticSearchConfiguration {

    @Bean
    public ElasticsearchTemplate elasticsearchTemplate(Client client, Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder) {
        return new ElasticsearchTemplate(client, new CustomEntityMapper(jackson2ObjectMapperBuilder.createXmlMapper(false).build()));
    }            
}

我覆盖了:

@Configuration
public class ElasticSearchConfiguration {
    @Value("${spring.data.elasticsearch.cluster-name}")
    private String clusterName;
    @Value("${spring.data.elasticsearch.cluster-nodes}")
    private String clusterNodes;
    @Bean
    public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException {
            String server = clusterNodes.split(":")[0];
            Integer port = Integer.parseInt(clusterNodes.split(":")[1]);
            Settings settings = Settings.settingsBuilder()
                .put("cluster.name", clusterName).build();
            client = TransportClient.builder().settings(settings).build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(server), port));
            return new ElasticsearchTemplate(client);
        }
    }

但我仍然无法使用prod yml连接elasticsearch。

在调试时,我在创建ElasticsearchTemplate bean时遇到以下错误:

方法抛出'java.lang.StackOverflowError'异常。无法评估org.elasticsearch.common.inject.InjectorImpl.toString()

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

我在Elasticsearch上有一个正在运作的Jhipster项目。如果您的弹性实例在默认端口上本地运行,则可以将这些属性保留为空。无需更改类ElasticSearchConfiguration

  

在生产中使用

     

在生产中,JHipster需要一个外部Elasticsearch实例。通过   默认情况下,应用程序查找正在运行的Elasticsearch实例   在本地主机上。可以使用标准的Spring Boot进行配置   属性,位于application-prod.yml文件中。