У меня есть приложение, построенное с использованием генератора 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()
Как я могу решить эту проблему?