Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make elasticsearch embedded accessible via localhost:9200

I am playing with spring-boot-sample-data-elastcisearch project. I've changed the pom and added:

SampleElasticsearchApplicationWebXml extends SpringBootServletInitializer 

to run with Tomcat embedded. My application.properties has

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

I want to be able to connect to localhost:9200 in order to use elasticsearch-head or other JS client. What am I missing? Thanks, Milan

like image 535
clandestino_bgd Avatar asked Aug 27 '14 10:08

clandestino_bgd


2 Answers

According to this ticket, you can now simply add this line to your configuration files:

spring.data.elasticsearch.properties.http.enabled=true
like image 189
Fynn Avatar answered Nov 17 '22 02:11

Fynn


you should define this for yourself, because NodeClientFactoryBean has an option for http.enabled but ElasticSearchAutoConfiguration does not (yet) set it.

@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);
                }
            }
        }
    }
}
like image 31
cfrick Avatar answered Nov 17 '22 01:11

cfrick