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
ありがとう
構成クラスとプロパティを削除します。
次の依存関係を追加します
<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
目的のプロパティを読み込む ファイルに基づきます。
自分の周りをハックする必要はありません。
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);
}