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

aja*_*ain 12 java elasticsearch spring-boot jhipster

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

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

ERROR 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,该应用程序有弹性搜索2.3.5

我的application-prod.yml设置:

spring:
    data:
        elasticsearch:
            cluster-name: 
            cluster-nodes: localhost:9300
Run Code Online (Sandbox Code Playgroud)

默认的ElasticSearchConfiguration是:

@Configuration
public class ElasticSearchConfiguration {

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

我覆盖了:

@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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

我该如何解决这个问题?

adm*_*635 2

我有一个使用 Elasticsearch 的 Jhipster 项目。如果您的弹性实例在默认端口上本地运行,您可以将这些属性留空。不需要改变类ElasticSearchConfiguration

在生产中使用

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