Consolidate Elasticsearch configuration properties
Previously, a number of Elasticsearch properties were duplicated across the spring.elasticsearch.rest and spring.data.elasticsearch.client.reactive prefixes for configuring the blocking REST client provided by Elasticsearch and the reactive client provided by Spring Data respectively. This could cause problems when using the Elasticsearch REST client configured with a custom spring.elasticsearch.rest.uris. If Spring WebFlux (to make use of WebClient) and Spring Data Elasticsearch were on the classpath, the reactive Elasticsearch Client would be autoconfigured but it would use the default value of its analogous spring.data.elasticsearch.client.reactive.endpoints property. It would be unable to connect, causing a startup failure. This commit consoliates the configuration properties where possible. Each setting that is common across the two clients is now configured using a single, shared spring.elasticsearch property. Each setting that is specific to the blocked REST client or the WebClient-based reactive client now have prefixes of spring.elasticsearch.restclient and spring.elasticsearch.webclient respectively. The old properties beneath spring.elasticsearch.rest and spring.data.elasticsearch.client.reactive have been deprecated. If a any deprecated property is set, all of the new properties are ignored. In other words, to migrate to the new properties, each usage of a now-deprecated property must be updated to use its new replacement instead. Closes gh-23106pull/28071/head
parent
dd366af849
commit
e2a355f003
@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.data.elasticsearch;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
|
||||||
|
import org.springframework.util.unit.DataSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deprecated configuration properties for Elasticsearch Reactive REST clients.
|
||||||
|
*
|
||||||
|
* @author Brian Clozel
|
||||||
|
* @deprecated since 2.6.0 for removal in 2.8.0
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@ConfigurationProperties(prefix = "spring.data.elasticsearch.client.reactive")
|
||||||
|
class DeprecatedReactiveElasticsearchRestClientProperties {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comma-separated list of the Elasticsearch endpoints to connect to.
|
||||||
|
*/
|
||||||
|
private List<String> endpoints = new ArrayList<>(Collections.singletonList("localhost:9200"));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the client should use SSL to connect to the endpoints.
|
||||||
|
*/
|
||||||
|
private boolean useSsl = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credentials username.
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credentials password.
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connection timeout.
|
||||||
|
*/
|
||||||
|
private Duration connectionTimeout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read and Write Socket timeout.
|
||||||
|
*/
|
||||||
|
private Duration socketTimeout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Limit on the number of bytes that can be buffered whenever the input stream needs
|
||||||
|
* to be aggregated.
|
||||||
|
*/
|
||||||
|
private DataSize maxInMemorySize;
|
||||||
|
|
||||||
|
private boolean customized = false;
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.uris")
|
||||||
|
public List<String> getEndpoints() {
|
||||||
|
return this.endpoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndpoints(List<String> endpoints) {
|
||||||
|
this.customized = true;
|
||||||
|
this.endpoints = endpoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(reason = "Use of SSL should be indicated through an https URI scheme")
|
||||||
|
public boolean isUseSsl() {
|
||||||
|
return this.useSsl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUseSsl(boolean useSsl) {
|
||||||
|
this.customized = true;
|
||||||
|
this.useSsl = useSsl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.username")
|
||||||
|
public String getUsername() {
|
||||||
|
return this.username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.customized = true;
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.password")
|
||||||
|
public String getPassword() {
|
||||||
|
return this.password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.customized = true;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.connection-timeout")
|
||||||
|
public Duration getConnectionTimeout() {
|
||||||
|
return this.connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConnectionTimeout(Duration connectionTimeout) {
|
||||||
|
this.customized = true;
|
||||||
|
this.connectionTimeout = connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.socket-timeout")
|
||||||
|
public Duration getSocketTimeout() {
|
||||||
|
return this.socketTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSocketTimeout(Duration socketTimeout) {
|
||||||
|
this.customized = true;
|
||||||
|
this.socketTimeout = socketTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.webclient.max-in-memory-size")
|
||||||
|
public DataSize getMaxInMemorySize() {
|
||||||
|
return this.maxInMemorySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxInMemorySize(DataSize maxInMemorySize) {
|
||||||
|
this.customized = true;
|
||||||
|
this.maxInMemorySize = maxInMemorySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isCustomized() {
|
||||||
|
return this.customized;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.elasticsearch;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deprecated configuration properties for Elasticsearch REST clients.
|
||||||
|
*
|
||||||
|
* @author Brian Clozel
|
||||||
|
* @deprecated since 2.6.0 for removal in 2.8.0.
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "spring.elasticsearch.rest")
|
||||||
|
@Deprecated
|
||||||
|
class DeprecatedElasticsearchRestClientProperties {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comma-separated list of the Elasticsearch instances to use.
|
||||||
|
*/
|
||||||
|
private List<String> uris = new ArrayList<>(Collections.singletonList("http://localhost:9200"));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credentials username.
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credentials password.
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connection timeout.
|
||||||
|
*/
|
||||||
|
private Duration connectionTimeout = Duration.ofSeconds(1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read timeout.
|
||||||
|
*/
|
||||||
|
private Duration readTimeout = Duration.ofSeconds(30);
|
||||||
|
|
||||||
|
private final Sniffer sniffer = new Sniffer();
|
||||||
|
|
||||||
|
private boolean customized = false;
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.uris")
|
||||||
|
public List<String> getUris() {
|
||||||
|
return this.uris;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUris(List<String> uris) {
|
||||||
|
this.customized = true;
|
||||||
|
this.uris = uris;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.username")
|
||||||
|
public String getUsername() {
|
||||||
|
return this.username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.customized = true;
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.password")
|
||||||
|
public String getPassword() {
|
||||||
|
return this.password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.customized = true;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.connection-timeout")
|
||||||
|
public Duration getConnectionTimeout() {
|
||||||
|
return this.connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConnectionTimeout(Duration connectionTimeout) {
|
||||||
|
this.customized = true;
|
||||||
|
this.connectionTimeout = connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.socket-timeout")
|
||||||
|
public Duration getReadTimeout() {
|
||||||
|
return this.readTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReadTimeout(Duration readTimeout) {
|
||||||
|
this.customized = true;
|
||||||
|
this.readTimeout = readTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isCustomized() {
|
||||||
|
return this.customized;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sniffer getSniffer() {
|
||||||
|
return this.sniffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
class Sniffer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interval between consecutive ordinary sniff executions.
|
||||||
|
*/
|
||||||
|
private Duration interval = Duration.ofMinutes(5);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delay of a sniff execution scheduled after a failure.
|
||||||
|
*/
|
||||||
|
private Duration delayAfterFailure = Duration.ofMinutes(1);
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.restclient.sniffer.interval")
|
||||||
|
public Duration getInterval() {
|
||||||
|
return this.interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInterval(Duration interval) {
|
||||||
|
DeprecatedElasticsearchRestClientProperties.this.customized = true;
|
||||||
|
this.interval = interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeprecatedConfigurationProperty(replacement = "spring.elasticsearch.restclient.sniffer.delay-after-failure")
|
||||||
|
public Duration getDelayAfterFailure() {
|
||||||
|
return this.delayAfterFailure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDelayAfterFailure(Duration delayAfterFailure) {
|
||||||
|
DeprecatedElasticsearchRestClientProperties.this.customized = true;
|
||||||
|
this.delayAfterFailure = delayAfterFailure;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.elasticsearch;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for Elasticsearch.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @since 2.4.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties("spring.elasticsearch")
|
||||||
|
public class ElasticsearchProperties {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comma-separated list of the Elasticsearch instances to use.
|
||||||
|
*/
|
||||||
|
private List<String> uris = new ArrayList<>(Collections.singletonList("http://localhost:9200"));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Username for authentication with Elasticsearch.
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Password for authentication with Elasticsearch.
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connection timeout used when communicating with Elasticsearch.
|
||||||
|
*/
|
||||||
|
private Duration connectionTimeout = Duration.ofSeconds(1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket timeout used when communicating with Elasticsearch.
|
||||||
|
*/
|
||||||
|
private Duration socketTimeout = Duration.ofSeconds(30);
|
||||||
|
|
||||||
|
public List<String> getUris() {
|
||||||
|
return this.uris;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUris(List<String> uris) {
|
||||||
|
this.uris = uris;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return this.username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return this.password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Duration getConnectionTimeout() {
|
||||||
|
return this.connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConnectionTimeout(Duration connectionTimeout) {
|
||||||
|
this.connectionTimeout = connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Duration getSocketTimeout() {
|
||||||
|
return this.socketTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSocketTimeout(Duration socketTimeout) {
|
||||||
|
this.socketTimeout = socketTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue