From 83cd9e2d5a9d8490b949a39b913f03bdd285371f Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 26 Apr 2022 11:48:37 +0200 Subject: [PATCH] Polishing. Use synchronous API for ES test data setup to avoid threading during the bean container startup. See #636 --- .../elasticsearch/conference/Conference.java | 18 ++-------- .../ElasticsearchOperationsTest.java | 2 +- elasticsearch/reactive/pom.xml | 20 +++++++++-- .../conference/ApplicationConfiguration.java | 33 +++++-------------- .../ReactiveElasticsearchOperationsTest.java | 2 +- 5 files changed, 32 insertions(+), 43 deletions(-) diff --git a/elasticsearch/example/src/main/java/example/springdata/elasticsearch/conference/Conference.java b/elasticsearch/example/src/main/java/example/springdata/elasticsearch/conference/Conference.java index b459b25b..ac2161c2 100644 --- a/elasticsearch/example/src/main/java/example/springdata/elasticsearch/conference/Conference.java +++ b/elasticsearch/example/src/main/java/example/springdata/elasticsearch/conference/Conference.java @@ -17,6 +17,9 @@ package example.springdata.elasticsearch.conference; import static org.springframework.data.elasticsearch.annotations.FieldType.*; +import lombok.Builder; +import lombok.Data; + import java.util.List; import org.springframework.data.annotation.Id; @@ -24,9 +27,6 @@ import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.core.geo.GeoPoint; -import lombok.Builder; -import lombok.Data; - /** * @author Artur Konczak * @author Oliver Gierke @@ -43,16 +43,4 @@ public class Conference { private GeoPoint location; private List keywords; - // do not remove it - public Conference() {} - - // do not remove it - work around for lombok generated constructor for all params - public Conference(String id, String name, String date, GeoPoint location, List keywords) { - - this.id = id; - this.name = name; - this.date = date; - this.location = location; - this.keywords = keywords; - } } diff --git a/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java b/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java index 4483aa37..70e518a1 100644 --- a/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java +++ b/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java @@ -74,7 +74,7 @@ class ElasticsearchOperationsTest { var query = new CriteriaQuery( new Criteria("keywords").contains(expectedWord).and(new Criteria("date").greaterThanEqual(expectedDate))); - var result = operations.search(query, Conference.class, IndexCoordinates.of("conference-index")); + var result = operations.search(query, Conference.class); assertThat(result).hasSize(3); diff --git a/elasticsearch/reactive/pom.xml b/elasticsearch/reactive/pom.xml index aff4c0e0..2f5a5e14 100644 --- a/elasticsearch/reactive/pom.xml +++ b/elasticsearch/reactive/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-data-elasticsearch-reactive-example @@ -17,6 +18,11 @@ + + org.springframework.boot + spring-boot-starter-log4j2 + + io.projectreactor reactor-test @@ -25,6 +31,16 @@ org.springframework.boot spring-boot-starter-webflux + + + org.apache.logging.log4j + log4j-to-slf4j + + + ch.qos.logback + logback-classic + + diff --git a/elasticsearch/reactive/src/main/java/example/springdata/elasticsearch/conference/ApplicationConfiguration.java b/elasticsearch/reactive/src/main/java/example/springdata/elasticsearch/conference/ApplicationConfiguration.java index 480bf987..ff9a3169 100644 --- a/elasticsearch/reactive/src/main/java/example/springdata/elasticsearch/conference/ApplicationConfiguration.java +++ b/elasticsearch/reactive/src/main/java/example/springdata/elasticsearch/conference/ApplicationConfiguration.java @@ -15,23 +15,14 @@ */ package example.springdata.elasticsearch.conference; -import reactor.test.StepVerifier; - -import java.io.IOException; import java.util.Arrays; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import org.elasticsearch.ElasticsearchStatusException; -import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; -import org.elasticsearch.client.RequestOptions; -import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.client.indices.CreateIndexRequest; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.geo.GeoPoint; /** @@ -40,27 +31,20 @@ import org.springframework.data.elasticsearch.core.geo.GeoPoint; @SpringBootApplication class ApplicationConfiguration { - @Autowired ReactiveElasticsearchOperations operations; - @Autowired RestHighLevelClient client; + @Autowired ElasticsearchOperations operations; @Autowired ConferenceRepository repository; @PreDestroy public void deleteIndex() { - try { - client.indices().delete(new DeleteIndexRequest("conference-index"), RequestOptions.DEFAULT); - } catch (IOException | ElasticsearchStatusException e) { - // just ignore it - } + operations.indexOps(Conference.class).delete(); } @PostConstruct public void insertDataSample() { - try { - client.indices().create(new CreateIndexRequest("conference-index"), RequestOptions.DEFAULT); - } catch (IOException | ElasticsearchStatusException e) { - // just ignore it - } + operations.indexOps(Conference.class).refresh(); + + // Save data sample var documents = Arrays.asList( Conference.builder().date("2014-11-06").name("Spring eXchange 2014 - London") @@ -75,7 +59,8 @@ class ApplicationConfiguration { Conference.builder().date("2014-10-04").name("JDD14 - Cracow").keywords(Arrays.asList("java", "spring")) .location(new GeoPoint(50.0646501D, 19.9449799)).build()); - // Remove all documents - repository.deleteAll().then(repository.saveAll(documents).then()).as(StepVerifier::create).verifyComplete(); + operations.save(documents); + operations.indexOps(Conference.class).refresh(); // ensure we have all documents properly refreshed to avoid races + // between tests. } } diff --git a/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java b/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java index 6081ff31..1deabe3f 100644 --- a/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java +++ b/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java @@ -71,7 +71,7 @@ class ReactiveElasticsearchOperationsTest { var expectedDate = "2014-10-29"; var expectedWord = "java"; var query = new CriteriaQuery( - new Criteria("keywords").contains(expectedWord).and("date").greaterThanEqual(expectedDate)); + new Criteria("keywords").contains(expectedWord).and(new Criteria("date").greaterThanEqual(expectedDate))); operations.search(query, Conference.class) // .as(StepVerifier::create) //