2015-09-29 69 views
7

İki profilden birini kullanan bir çalışma Spring Boot Elasticearch Uygulaması var: application.dev.properties veya application.prod.properties. Bu bölüm iyi çalışıyor. External elasticsearch uygulamasının application.xxx.properties dosyasından okunmasıyla ilgili sorun yaşıyorum. Benim çok çevre sorunu çözmez açıkçasıSpring Boot Elasticsearch Yapılandırma

@Configuration 
@PropertySource(value = "classpath:config/elasticsearch.properties") 
public class ElasticsearchConfiguration { 

    @Resource 
    private Environment environment; 

    @Bean 
    public Client client() { 
     TransportClient client = new TransportClient(); 
     TransportAddress address = new InetSocketTransportAddress(
       environment.getProperty("elasticsearch.host"), 
       Integer.parseInt(environment.getProperty("elasticsearch.port")) 
     ); 
     client.addTransportAddress(address);   
     return client; 
    } 

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

ama:

Bu çalışır.

Ayrıca, ana makine ve bağlantı noktası değişkenleri için @Value ek açıklamalarını da başarıyla denedim.

Yukarıdaki değerleri uygulama özellikleri dosyasından okumak için nasıl değiştirebilirim veya çalıştırmak istediğim profile göre farklı bir @PropertySource dosyası seçebilir miyim?

spring.data.elasticsearch.properties.host = 10.10.1.10 
spring.data.elasticsearch.properties.port = 9300 

Teşekkür

+0

Neden sadece Bahar Önyükleme kullanarak ama çevresinde çalışmak için çalışmıyoruz. Yay önyükleme, seçtiğiniz profile göre bir özellik dosyasını zaten yükler. Yani temelde bunu zorlaştırıyorsunuz ... Ayrıca Spring Boot sizin için ElasticSearch'i zaten yapılandırıyor, bu yüzden neden tekrar kendiniz yapmaya çalışıyorsunuz .. –

cevap

13

yapılandırma sınıfı ve özellikleri kaldırın.

Sadece istenilen ortam için application-prod.properties ve application-dev.properties ve değişim bir karşı spring.data.elasticsearch özelliklerini eklemek aşağıdaki bağımlılık

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 
</dependency> 

ekleyin. Bu, Spring Boot kılavuzunun ElasticSearch section numaralı belgede açıklanmıştır.

spring.data.elasticsearch.cluster-nodes=10.10.1.10:9300 

ya dosyadaki değer elbette farklı olacaktır (ya application.properties yılında varsayılan koymak ve sadece bir application-dev.properties ile geçersiz kılar.

Bahar Boot spring.profiles.activeload the desired properties dosyasına göre olacak.

Orada

+0

Geri bildirim için teşekkürler. Özel yapılandırma olmadan yalnızca özellikleri kullanmaya çalıştığımda, her zaman harici içeriğimi Elasticsearch'te ve harici sunucumda çalıştırır. –

+1

Küme düğümü özelliklerini belirtirseniz bu durum geçerli olmamalıdır (bu ayrıca başvuru kılavuzunda açıklanmıştır). –

+0

ES'de referans kılavuzunu okudum. Yapmakta olduğum başka bir şey uygulama özelliklerinde spring.data.elasticsearch.cluster-nodes satırıyla çakışıyor olmalıdır. Bu yüzden el ile yapılandırmayı oluşturmaya çalıştım. –

1

Deinum ile aynı fikirdeyim, eğer Bahar önyüklemeyi kullanıyorsanız, aktif profilden aktif olanları alırsınız.

Projemde profilleri farklı ve bu benim elasticsearch yapılandırmasıdır:

@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); 

    } 
İlgili konular