Настройка elasticsearch в проекте JHipster с использованием prod yml

У меня есть приложение, построенное с использованием генератора 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 приложение имеет 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);
        }
    }

Но я все еще не могу подключить elasticsearch, используя prod yml.

Во время отладки я получил следующую ошибку, в то время как ElasticearchTemplate bean создание:

Метод бросил исключение "java.lang.StackOverflowError". Невозможно оценить org.elasticsearch.common.inject.InjectorImpl.toString()

Как я могу решить эту проблему?

Ответ 1

У меня есть рабочий проект Jhipster с Elasticsearch. Если ваш экземпляр Elastic работает локально на портах по умолчанию, вы можете оставить эти свойства пустыми. Не нужно менять класс ElasticSearchConfiguration

Использование в производстве

В производстве JHipster ожидает внешнего экземпляра Elasticsearch. По умолчанию приложение ищет экземпляр Elasticsearch, работающий на localhost. Это можно настроить с помощью стандартных свойств Spring Boot в файле application-prod.yml.