web-dev-qa-db-ja.com

Spring Boot Elasticsearchの構成

Application.dev.propertiesまたはapplication.prod.propertiesの2つのプロファイルのいずれかを使用する、稼働中のSpring Boot Elasticsearchアプリケーションがあります。その部分は正常に動作します。 application.xxx.propertiesから読み取るための外部elasticsearchの取得に問題があります。

これは動作します:

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

しかし、明らかに複数環境の問題は解決しません。

また、ホスト変数とポート変数の@Valueアノテーションも成功しませんでした。

上記を変換して、アプリケーションプロパティファイルから値を読み取る、または実行するプロファイルに基づいて別の@PropertySourceファイルを選択するにはどうすればよいですか?

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

ありがとう

12
Joe Reymann

構成クラスとプロパティを削除します。

次の依存関係を追加します

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

spring.data.elasticsearchプロパティをapplication-prod.propertiesおよびapplication-dev.propertiesに追加し、目的の環境に合わせて変更します。これについては、Spring Bootガイドの ElasticSearchセクション で説明されています。

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

もちろん、どちらのファイルの値も異なります(または、デフォルトをapplication.propertiesに入れて、単にapplication-dev.propertiesでオーバーライドします。

Spring Bootはspring.profiles.active目的のプロパティを読み込む ファイルに基づきます。

自分の周りをハックする必要はありません。

26
M. Deinum

Deinumに同意します。Springブートを使用している場合、アクティブなプロファイルからプロパティをアクティブに取得します。

私のプロジェクトにはさまざまなプロファイルがあり、これは私のelasticsearch構成です:

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

    }
3
ignacio.suay