我有一个使用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()
如何解决此问题?
答案 0 :(得分:1)
我在Elasticsearch上有一个正在运作的Jhipster项目。如果您的弹性实例在默认端口上本地运行,则可以将这些属性保留为空。无需更改类ElasticSearchConfiguration
在生产中使用
在生产中,JHipster需要一个外部Elasticsearch实例。通过 默认情况下,应用程序查找正在运行的Elasticsearch实例 在本地主机上。可以使用标准的Spring Boot进行配置 属性,位于application-prod.yml文件中。