如何使elasticsearch嵌入式可通过localhost:9200访问

10

我正在玩spring-boot-sample-data-elastcisearch项目。 我已更改pom并添加:


SampleElasticsearchApplicationWebXml extends SpringBootServletInitializer 

使用嵌入式Tomcat运行。 我的application.properties文件中有:

spring.data.elasticsearch.http-enabled=true
spring.data.elasticsearch.local=true

我希望能够连接到localhost:9200,以便使用elasticsearch-head或其他JS客户端。我缺少什么?
谢谢,
Milan


你可以尝试阅读Spring Elasticsearch客户端的文档。看起来他们支持多种连接Elasticsearch的方式。我怀疑设置Elasticsearch属性不会让它神奇地做你想要的事情。如果你想启动嵌入式的Elasticsearch,你可能需要自己去做。为此,请阅读Elasticsearch文档。他们确实支持运行嵌入式客户端节点,但我怀疑他们不会为此启动HTTP传输,因为这是不必要的。你仍然需要一个适当的Elasticsearch节点来连接它。 - Jilles van Gurp
2个回答

17
根据此问题单,您现在可以将以下行添加到配置文件中:
spring.data.elasticsearch.properties.http.enabled=true

7

你需要为自己定义这个,因为NodeClientFactoryBean有一个http.enabled选项,但是ElasticSearchAutoConfiguration没有(尚未)设置它。

@Configuration
@EnableConfigurationProperties(ElasticsearchProperties.class)
public class ElasticsearchConfiguration implements DisposableBean {

    private static Log logger = LogFactory.getLog(ElasticsearchConfiguration.class);

    @Autowired
    private ElasticsearchProperties properties;

    private NodeClient client;

    @Bean
    public ElasticsearchTemplate elasticsearchTemplate() {
        return new ElasticsearchTemplate(esClient());
    }

    @Bean
    public Client esClient() {
        try {
            if (logger.isInfoEnabled()) {
                logger.info("Starting Elasticsearch client");
            }
            NodeBuilder nodeBuilder = new NodeBuilder();
            nodeBuilder
                    .clusterName(this.properties.getClusterName())
                    .local(false)
            ;
            nodeBuilder.settings()
                    .put("http.enabled", true)
            ;
            this.client = (NodeClient)nodeBuilder.node().client();
            return this.client;
        }
        catch (Exception ex) {
            throw new IllegalStateException(ex);
        }
    }

    @Override
    public void destroy() throws Exception {
        if (this.client != null) {
            try {
                if (logger.isInfoEnabled()) {
                    logger.info("Closing Elasticsearch client");
                }
                if (this.client != null) {
                    this.client.close();
                }
            }
            catch (final Exception ex) {
                if (logger.isErrorEnabled()) {
                    logger.error("Error closing Elasticsearch client: ", ex);
                }
            }
        }
    }
}

谢谢,我最终重写了Spring Boot的ElasticSearchAutoConfiguration,并且它现在可以正常工作了。 - clandestino_bgd
不要忘记在您的启动类(具有“main”方法的类)中禁用ElasticsearchAutoConfiguration @EnableAutoConfiguration(exclude= { ElasticsearchAutoConfiguration.class })。否则,引导程序将启动两个节点! - einsA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接