Skip to content

Commit 5c057a2

Browse files
committed
Auto-configure the new Elasticsearch clients
This commit introduces auto-configuration for the new Elasticsearch clients that are based upon their new Java client. The new Java client builds on top of their existing low-level REST client, replacing the high-level REST client which has been deprecated. As part of introducing support for the new Elasticsearch client, the auto-configuration for the templates (both imperative and reactive) provided by Spring Data has also been updated to use the new templates that build upon the new Java client. As part of these changes, support for the high-level REST client and the old Spring Data Elasticsearch templates has been removed. One significant change is that the new reactive template is no longer based on WebClient. As a result, the WebClient-specific configuration property has been removed. Closes gh-30647 Closes gh-28597 Closes gh-31755
1 parent f9ccfc1 commit 5c057a2

File tree

44 files changed

+602
-850
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+602
-850
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ dependencies {
103103
optional("org.eclipse.jetty:jetty-server") {
104104
exclude group: "org.eclipse.jetty.toolchain", module: "jetty-jakarta-servlet-api"
105105
}
106-
optional("org.elasticsearch:elasticsearch")
107106
optional("org.elasticsearch.client:elasticsearch-rest-client") {
108107
exclude group: "commons-logging", module: "commons-logging"
109108
}
@@ -168,9 +167,6 @@ dependencies {
168167
testImplementation("org.eclipse.jetty:jetty-webapp") {
169168
exclude group: "org.eclipse.jetty.toolchain", module: "jetty-jakarta-servlet-api"
170169
}
171-
testImplementation("org.elasticsearch.client:elasticsearch-rest-high-level-client") {
172-
exclude(group: "commons-logging", module: "commons-logging")
173-
}
174170
testImplementation("org.hamcrest:hamcrest")
175171
testImplementation("org.hsqldb:hsqldb")
176172
testImplementation("org.junit.jupiter:junit-jupiter")
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3232
import org.springframework.boot.autoconfigure.elasticsearch.ReactiveElasticsearchClientAutoConfiguration;
3333
import org.springframework.context.annotation.Bean;
34-
import org.springframework.data.elasticsearch.client.erhlc.ReactiveElasticsearchClient;
34+
import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient;
3535

3636
/**
3737
* {@link EnableAutoConfiguration Auto-configuration} for
@@ -45,7 +45,7 @@
4545
@ConditionalOnClass({ ReactiveElasticsearchClient.class, Flux.class })
4646
@ConditionalOnBean(ReactiveElasticsearchClient.class)
4747
@ConditionalOnEnabledHealthIndicator("elasticsearch")
48-
public class ElasticSearchReactiveHealthContributorAutoConfiguration extends
48+
public class ElasticsearchReactiveHealthContributorAutoConfiguration extends
4949
CompositeReactiveHealthContributorConfiguration<ElasticsearchReactiveHealthIndicator, ReactiveElasticsearchClient> {
5050

5151
@Bean
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
@ConditionalOnClass(RestClient.class)
4444
@ConditionalOnBean(RestClient.class)
4545
@ConditionalOnEnabledHealthIndicator("elasticsearch")
46-
public class ElasticSearchRestHealthContributorAutoConfiguration
46+
public class ElasticsearchRestHealthContributorAutoConfiguration
4747
extends CompositeHealthContributorConfiguration<ElasticsearchRestClientHealthIndicator, RestClient> {
4848

4949
@Bean

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationP
1414
org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration
1515
org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseHealthContributorAutoConfiguration
1616
org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseReactiveHealthContributorAutoConfiguration
17-
org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticSearchReactiveHealthContributorAutoConfiguration
18-
org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticSearchRestHealthContributorAutoConfiguration
17+
org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchReactiveHealthContributorAutoConfiguration
18+
org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchRestHealthContributorAutoConfiguration
1919
org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration
2020
org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration
2121
org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchReactiveHealthContributorAutoConfigurationTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import static org.assertj.core.api.Assertions.assertThat;
3131

3232
/**
33-
* Tests for {@link ElasticSearchReactiveHealthContributorAutoConfiguration}.
33+
* Tests for {@link ElasticsearchReactiveHealthContributorAutoConfiguration}.
3434
*
3535
* @author Aleksander Lech
3636
*/
@@ -39,7 +39,7 @@ class ElasticsearchReactiveHealthContributorAutoConfigurationTests {
3939
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4040
.withConfiguration(AutoConfigurations.of(ElasticsearchDataAutoConfiguration.class,
4141
ReactiveElasticsearchClientAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class,
42-
ElasticSearchReactiveHealthContributorAutoConfiguration.class,
42+
ElasticsearchReactiveHealthContributorAutoConfiguration.class,
4343
HealthContributorAutoConfiguration.class));
4444

4545
@Test
@@ -51,7 +51,7 @@ void runShouldCreateIndicator() {
5151
@Test
5252
void runWithRegularIndicatorShouldOnlyCreateReactiveIndicator() {
5353
this.contextRunner
54-
.withConfiguration(AutoConfigurations.of(ElasticSearchRestHealthContributorAutoConfiguration.class))
54+
.withConfiguration(AutoConfigurations.of(ElasticsearchRestHealthContributorAutoConfiguration.class))
5555
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchReactiveHealthIndicator.class)
5656
.hasBean("elasticsearchHealthContributor")
5757
.doesNotHaveBean(ElasticsearchRestClientHealthIndicator.class));
Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@
3232
import static org.assertj.core.api.Assertions.assertThat;
3333

3434
/**
35-
* Tests for {@link ElasticSearchRestHealthContributorAutoConfiguration}.
35+
* Tests for {@link ElasticsearchRestHealthContributorAutoConfiguration}.
3636
*
3737
* @author Filip Hrisafov
3838
* @author Andy Wilkinson
3939
*/
40-
class ElasticSearchRestHealthContributorAutoConfigurationTests {
40+
class ElasticsearchRestHealthContributorAutoConfigurationTests {
4141

4242
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4343
.withConfiguration(AutoConfigurations.of(ElasticsearchRestClientAutoConfiguration.class,
44-
ElasticSearchRestHealthContributorAutoConfiguration.class,
44+
ElasticsearchRestHealthContributorAutoConfiguration.class,
4545
HealthContributorAutoConfiguration.class));
4646

4747
@Test
@@ -51,29 +51,19 @@ void runShouldCreateIndicator() {
5151
}
5252

5353
@Test
54-
@SuppressWarnings("deprecation")
55-
void runWithoutRestHighLevelClientAndWithoutRestClientShouldNotCreateIndicator() {
56-
this.contextRunner
57-
.withClassLoader(
58-
new FilteredClassLoader(org.elasticsearch.client.RestHighLevelClient.class, RestClient.class))
54+
void runWithoutRestClientShouldNotCreateIndicator() {
55+
this.contextRunner.withClassLoader(new FilteredClassLoader(RestClient.class))
5956
.run((context) -> assertThat(context).doesNotHaveBean(ElasticsearchRestClientHealthIndicator.class)
6057
.doesNotHaveBean("elasticsearchHealthContributor"));
6158
}
6259

6360
@Test
64-
void runWithoutRestHighLevelClientAndWithRestClientShouldCreateIndicator() {
61+
void runWithRestClientShouldCreateIndicator() {
6562
this.contextRunner.withUserConfiguration(CustomRestClientConfiguration.class)
6663
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestClientHealthIndicator.class)
6764
.hasBean("elasticsearchHealthContributor"));
6865
}
6966

70-
@Test
71-
void runWithRestHighLevelClientAndWithRestClientShouldCreateIndicator() {
72-
this.contextRunner.withUserConfiguration(CustomRestHighClientConfiguration.class)
73-
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestClientHealthIndicator.class)
74-
.hasBean("elasticsearchHealthContributor"));
75-
}
76-
7767
@Test
7868
void runWhenDisabledShouldNotCreateIndicator() {
7969
this.contextRunner.withPropertyValues("management.health.elasticsearch.enabled:false")
@@ -91,20 +81,4 @@ RestClient customRestClient(RestClientBuilder builder) {
9181

9282
}
9383

94-
@Configuration(proxyBeanMethods = false)
95-
@SuppressWarnings("deprecation")
96-
static class CustomRestHighClientConfiguration {
97-
98-
@Bean
99-
org.elasticsearch.client.RestHighLevelClient customRestHighClient(RestClientBuilder builder) {
100-
return new org.elasticsearch.client.RestHighLevelClient(builder);
101-
}
102-
103-
@Bean
104-
RestClient customClient(org.elasticsearch.client.RestHighLevelClient restHighLevelClient) {
105-
return restHighLevelClient.getLowLevelClient();
106-
}
107-
108-
}
109-
11084
}

spring-boot-project/spring-boot-actuator/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,9 @@ dependencies {
4343
optional("org.eclipse.jetty:jetty-server") {
4444
exclude(group: "org.eclipse.jetty.toolchain", module: "jetty-jakarta-servlet-api")
4545
}
46-
optional("org.elasticsearch:elasticsearch")
4746
optional("org.elasticsearch.client:elasticsearch-rest-client") {
4847
exclude(group: "commons-logging", module: "commons-logging")
4948
}
50-
optional("org.elasticsearch.client:elasticsearch-rest-high-level-client") {
51-
exclude(group: "commons-logging", module: "commons-logging")
52-
}
5349
optional("org.flywaydb:flyway-core")
5450
optional("org.hibernate.validator:hibernate-validator")
5551
optional("org.influxdb:influxdb-java")

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchReactiveHealthIndicator.java

Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,15 @@
1616

1717
package org.springframework.boot.actuate.elasticsearch;
1818

19-
import java.util.Map;
20-
19+
import co.elastic.clients.elasticsearch._types.HealthStatus;
20+
import co.elastic.clients.elasticsearch.cluster.HealthResponse;
2121
import reactor.core.publisher.Mono;
2222

2323
import org.springframework.boot.actuate.health.AbstractReactiveHealthIndicator;
2424
import org.springframework.boot.actuate.health.Health;
2525
import org.springframework.boot.actuate.health.HealthIndicator;
2626
import org.springframework.boot.actuate.health.Status;
27-
import org.springframework.core.ParameterizedTypeReference;
28-
import org.springframework.data.elasticsearch.client.erhlc.ReactiveElasticsearchClient;
29-
import org.springframework.http.HttpStatus;
30-
import org.springframework.http.HttpStatusCode;
31-
import org.springframework.web.reactive.function.client.ClientResponse;
32-
import org.springframework.web.reactive.function.client.WebClient;
27+
import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient;
3328

3429
/**
3530
* {@link HealthIndicator} for an Elasticsearch cluster using a
@@ -42,11 +37,6 @@
4237
*/
4338
public class ElasticsearchReactiveHealthIndicator extends AbstractReactiveHealthIndicator {
4439

45-
private static final ParameterizedTypeReference<Map<String, Object>> STRING_OBJECT_MAP = new ParameterizedTypeReference<>() {
46-
};
47-
48-
private static final String RED_STATUS = "red";
49-
5040
private final ReactiveElasticsearchClient client;
5141

5242
public ElasticsearchReactiveHealthIndicator(ReactiveElasticsearchClient client) {
@@ -56,32 +46,33 @@ public ElasticsearchReactiveHealthIndicator(ReactiveElasticsearchClient client)
5646

5747
@Override
5848
protected Mono<Health> doHealthCheck(Health.Builder builder) {
59-
return this.client.execute((webClient) -> getHealth(builder, webClient));
60-
}
61-
62-
private Mono<Health> getHealth(Health.Builder builder, WebClient webClient) {
63-
return webClient.get().uri("/_cluster/health/").exchangeToMono((response) -> doHealthCheck(builder, response));
49+
return this.client.cluster().health((b) -> b).map((response) -> processResponse(builder, response));
6450
}
6551

66-
private Mono<Health> doHealthCheck(Health.Builder builder, ClientResponse response) {
67-
HttpStatusCode httpStatusCode = response.statusCode();
68-
HttpStatus httpStatus = HttpStatus.resolve(httpStatusCode.value());
69-
if (httpStatusCode.is2xxSuccessful()) {
70-
return response.bodyToMono(STRING_OBJECT_MAP).map((body) -> getHealth(builder, body));
71-
}
72-
builder.down();
73-
builder.withDetail("statusCode", httpStatusCode.value());
74-
if (httpStatus != null) {
75-
builder.withDetail("reasonPhrase", httpStatus.getReasonPhrase());
52+
private Health processResponse(Health.Builder builder, HealthResponse response) {
53+
if (!response.timedOut()) {
54+
HealthStatus status = response.status();
55+
builder.status((HealthStatus.Red == status) ? Status.OUT_OF_SERVICE : Status.UP);
56+
builder.withDetail("cluster_name", response.clusterName());
57+
builder.withDetail("status", response.status().jsonValue());
58+
builder.withDetail("timed_out", response.timedOut());
59+
builder.withDetail("number_of_nodes", response.numberOfNodes());
60+
builder.withDetail("number_of_data_nodes", response.numberOfDataNodes());
61+
builder.withDetail("active_primary_shards", response.activePrimaryShards());
62+
builder.withDetail("active_shards", response.activeShards());
63+
builder.withDetail("relocating_shards", response.relocatingShards());
64+
builder.withDetail("initializing_shards", response.initializingShards());
65+
builder.withDetail("unassigned_shards", response.unassignedShards());
66+
builder.withDetail("delayed_unassigned_shards", response.delayedUnassignedShards());
67+
builder.withDetail("number_of_pending_tasks", response.numberOfPendingTasks());
68+
builder.withDetail("number_of_in_flight_fetch", response.numberOfInFlightFetch());
69+
builder.withDetail("task_max_waiting_in_queue_millis",
70+
response.taskMaxWaitingInQueueMillis().toEpochMilli());
71+
builder.withDetail("active_shards_percent_as_number",
72+
Double.parseDouble(response.activeShardsPercentAsNumber()));
73+
return builder.build();
7674
}
77-
return response.releaseBody().thenReturn(builder.build());
78-
}
79-
80-
private Health getHealth(Health.Builder builder, Map<String, Object> body) {
81-
String status = (String) body.get("status");
82-
builder.status(RED_STATUS.equals(status) ? Status.OUT_OF_SERVICE : Status.UP);
83-
builder.withDetails(body);
84-
return builder.build();
75+
return builder.down().build();
8576
}
8677

8778
}

spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchReactiveHealthIndicatorTests.java

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,20 @@
1919
import java.time.Duration;
2020
import java.util.Map;
2121

22+
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
23+
import co.elastic.clients.transport.rest_client.RestClientTransport;
2224
import okhttp3.mockwebserver.MockResponse;
2325
import okhttp3.mockwebserver.MockWebServer;
26+
import org.apache.http.HttpHost;
27+
import org.elasticsearch.client.ResponseException;
28+
import org.elasticsearch.client.RestClient;
2429
import org.junit.jupiter.api.AfterEach;
2530
import org.junit.jupiter.api.BeforeEach;
2631
import org.junit.jupiter.api.Test;
2732

2833
import org.springframework.boot.actuate.health.Health;
2934
import org.springframework.boot.actuate.health.Status;
30-
import org.springframework.data.elasticsearch.client.ClientConfiguration;
31-
import org.springframework.data.elasticsearch.client.erhlc.ReactiveElasticsearchClient;
35+
import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient;
3236
import org.springframework.http.HttpHeaders;
3337
import org.springframework.http.HttpStatus;
3438
import org.springframework.http.MediaType;
@@ -50,13 +54,13 @@ class ElasticsearchReactiveHealthIndicatorTests {
5054

5155
private ElasticsearchReactiveHealthIndicator healthIndicator;
5256

53-
@SuppressWarnings("deprecation")
5457
@BeforeEach
5558
void setup() throws Exception {
5659
this.server = new MockWebServer();
5760
this.server.start();
58-
ReactiveElasticsearchClient client = org.springframework.data.elasticsearch.client.erhlc.DefaultReactiveElasticsearchClient
59-
.create(ClientConfiguration.create(this.server.getHostName() + ":" + this.server.getPort()));
61+
ReactiveElasticsearchClient client = new ReactiveElasticsearchClient(new RestClientTransport(
62+
RestClient.builder(HttpHost.create(this.server.getHostName() + ":" + this.server.getPort())).build(),
63+
new JacksonJsonpMapper()));
6064
this.healthIndicator = new ElasticsearchReactiveHealthIndicator(client);
6165
}
6266

@@ -86,20 +90,15 @@ void elasticsearchIsDown() throws Exception {
8690
this.server.shutdown();
8791
Health health = this.healthIndicator.health().block(TIMEOUT);
8892
assertThat(health.getStatus()).isEqualTo(Status.DOWN);
89-
assertThat(health.getDetails().get("error")).asString()
90-
.contains("org.springframework.data.elasticsearch.client.NoReachableHostException");
93+
assertThat(health.getDetails().get("error")).asString().contains("Connection refused");
9194
}
9295

9396
@Test
9497
void elasticsearchIsDownByResponseCode() {
95-
// first enqueue an OK response since the HostChecker first sends a HEAD request
96-
// to "/"
97-
this.server.enqueue(new MockResponse().setResponseCode(HttpStatus.OK.value()));
9898
this.server.enqueue(new MockResponse().setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value()));
9999
Health health = this.healthIndicator.health().block(TIMEOUT);
100100
assertThat(health.getStatus()).isEqualTo(Status.DOWN);
101-
assertThat(health.getDetails().get("statusCode")).asString().isEqualTo("500");
102-
assertThat(health.getDetails().get("reasonPhrase")).asString().isEqualTo("Internal Server Error");
101+
assertThat(health.getDetails().get("error")).asString().startsWith(ResponseException.class.getName());
103102
}
104103

105104
@Test
@@ -116,32 +115,25 @@ private void assertHealthDetailsWithStatus(Map<String, Object> details, String s
116115
entry("active_primary_shards", 0), entry("active_shards", 0), entry("relocating_shards", 0),
117116
entry("initializing_shards", 0), entry("unassigned_shards", 0), entry("delayed_unassigned_shards", 0),
118117
entry("number_of_pending_tasks", 0), entry("number_of_in_flight_fetch", 0),
119-
entry("task_max_waiting_in_queue_millis", 0), entry("active_shards_percent_as_number", 100.0));
118+
entry("task_max_waiting_in_queue_millis", 0L), entry("active_shards_percent_as_number", 100.0));
120119
}
121120

122121
private void setupMockResponse(int responseCode, String status) {
123-
// first enqueue an OK response since the HostChecker first sends a HEAD request
124-
// to "/"
125-
this.server.enqueue(new MockResponse());
126-
MockResponse mockResponse = new MockResponse().setResponseCode(HttpStatus.valueOf(responseCode).value())
127-
.setBody(createJsonResult(responseCode, status))
128-
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
122+
MockResponse mockResponse = new MockResponse().setBody(createJsonResult(status))
123+
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
124+
.setHeader("X-Elastic-Product", "Elasticsearch");
129125
this.server.enqueue(mockResponse);
130126
}
131127

132-
private String createJsonResult(int responseCode, String status) {
133-
if (responseCode == 200) {
134-
return String.format(
135-
"{\"cluster_name\":\"elasticsearch\","
136-
+ "\"status\":\"%s\",\"timed_out\":false,\"number_of_nodes\":1,"
137-
+ "\"number_of_data_nodes\":1,\"active_primary_shards\":0,"
138-
+ "\"active_shards\":0,\"relocating_shards\":0,\"initializing_shards\":0,"
139-
+ "\"unassigned_shards\":0,\"delayed_unassigned_shards\":0,"
140-
+ "\"number_of_pending_tasks\":0,\"number_of_in_flight_fetch\":0,"
141-
+ "\"task_max_waiting_in_queue_millis\":0,\"active_shards_percent_as_number\":100.0}",
142-
status);
143-
}
144-
return "{\n \"error\": \"Server Error\",\n \"status\": " + responseCode + "\n}";
128+
private String createJsonResult(String status) {
129+
return String.format(
130+
"{\"cluster_name\":\"elasticsearch\"," + "\"status\":\"%s\",\"timed_out\":false,\"number_of_nodes\":1,"
131+
+ "\"number_of_data_nodes\":1,\"active_primary_shards\":0,"
132+
+ "\"active_shards\":0,\"relocating_shards\":0,\"initializing_shards\":0,"
133+
+ "\"unassigned_shards\":0,\"delayed_unassigned_shards\":0,"
134+
+ "\"number_of_pending_tasks\":0,\"number_of_in_flight_fetch\":0,"
135+
+ "\"task_max_waiting_in_queue_millis\":0,\"active_shards_percent_as_number\":100.0}",
136+
status);
145137
}
146138

147139
}

spring-boot-project/spring-boot-autoconfigure/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ description = "Spring Boot AutoConfigure"
1212
dependencies {
1313
api(project(":spring-boot-project:spring-boot"))
1414

15+
optional("co.elastic.clients:elasticsearch-java") {
16+
exclude group: "commons-logging", module: "commons-logging"
17+
}
1518
optional("com.fasterxml.jackson.core:jackson-databind")
1619
optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor")
1720
optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml")
@@ -99,9 +102,6 @@ dependencies {
99102
optional("org.elasticsearch.client:elasticsearch-rest-client-sniffer") {
100103
exclude group: "commons-logging", module: "commons-logging"
101104
}
102-
optional("org.elasticsearch.client:elasticsearch-rest-high-level-client") {
103-
exclude group: "commons-logging", module: "commons-logging"
104-
}
105105
optional("org.flywaydb:flyway-core")
106106
optional("org.flywaydb:flyway-sqlserver")
107107
optional("org.freemarker:freemarker")

0 commit comments

Comments
 (0)