当前位置: 首页 > 知识库问答 >
问题:

我如何用Spring-Data-ElasticSearch在elasticsearch中进行集成测试?

蒋哲
2023-03-14

下面是我试图作为POC开始的部分,它抛出异常:

    public class EmbeddedElasticConfiguration {

    public static final String VERSION = "6.8.4";
    public static final String DOWNLOAD_DIRECTORY = "<path>\\test-elasticsearch";
    public static final String INSTALLATION_DIRECTORY = "<path>\test-elasticsearch";
    public static final String NAME = "elasticsearch";
    public static final String TRANSPORT_PORT = "9300";
    public static final String HTTP_CLIENT_PORT = "9200";
    public static final String TEST_INDEX = "salesorder";
    public static final String TEST_TYPE = "salesorder";
    public static final String RESOURCE_LOCATION = "src/test/resources/salesorder-mapping.json";
    private ObjectMapper objectMapper = new ObjectMapper();
    EmbeddedElastic embeddedElastic;

    @Test
    public void configure() throws IOException, InterruptedException {
        embeddedElastic = EmbeddedElastic.builder()
                .withElasticVersion(VERSION)
                .withSetting(TRANSPORT_TCP_PORT, 9300)
                .withSetting(CLUSTER_NAME, "my-cluster")
                //.withPlugin("analysis-stempel")
                .withDownloadDirectory(new File(DOWNLOAD_DIRECTORY))
                .withInstallationDirectory(new File(INSTALLATION_DIRECTORY))
                .withSetting(HTTP_PORT, 9200)
                .withIndex(TEST_INDEX, IndexSettings.builder()
                       .withType(TEST_TYPE, readMappingFromJson())
                     .build())
                .build();

        embeddedElastic.start();
    }

    private String readMappingFromJson() throws IOException {
        final File file = ResourceUtils.getFile(RESOURCE_LOCATION);
        String mapping = new String(Files.readAllBytes(file.toPath()));
        System.out.println("mapping: "+ mapping);
        return mapping;
    }

    @After
    public void stopServer() {
        embeddedElastic.stop();
    }
}

我在以下得到以下例外:

pl.allegro.tech.embeddedelasticsearch.EmbeddedElasticsearchStartupException: Failed to start elasticsearch within time-out

    at pl.allegro.tech.embeddedelasticsearch.ElasticServer.waitForElasticToStart(ElasticServer.java:127)
    at pl.allegro.tech.embeddedelasticsearch.ElasticServer.start(ElasticServer.java:50)
    at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.startElastic(EmbeddedElastic.java:82)
    at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.start(EmbeddedElastic.java:63)
    at com.xxx.elasticsearch.adapter.configuration.EmbeddedElasticConfiguration.configure(EmbeddedElasticConfiguration.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

是否有人可以帮助使用spring-data在elasticsearch中进行集成测试的任何其他选项,或者我应该如何为elasticsearch编写集成测试。

我知道在stackoverflow和embedded-elasticsearch的其他门户上还有其他的答案,但这些都不适合我当前的elasticsearch版本。

共有1个答案

万俟玉书
2023-03-14

您没有编写您使用的JUnit版本。我可以告诉您我们如何在Spring Data Elasticsearch本身中处理这个问题:

对于JUnit4,您可以检查使用Utils类设置本地运行的Elasticsearch节点的JUnit4规则,并在结束时将其删除。

对于JUnit5,您可能会了解当前主分支是如何处理这一点的,相关的类可以在这里找到。

 类似资料:
  • 我使用的是ElasticSearch7.1.0,我想创建一个spring-boot应用程序,并使用Spring-Data-Elastic-Search与Elasticsearch连接。但我还没有找到使用查询和聚合的解决方案。

  • 问题内容: 有没有办法在运行集成测试之前在gradle构建中启动elasticsearch,然后再停止elasticsearch? 到目前为止,我的方法如下,但这阻碍了gradle构建的进一步执行。 问题答案: 出于我的目的,我决定在Java代码的集成测试中开始elasticsearch。 我已经尝试过ElasticsearchIntegrationTest,但是不适用于spring,因为它与Sp

  • Spring Data Elasticsearch 项目提供了对 elasticsearch 搜索引擎的集成。

  • 问题内容: 有谁知道如何整合spring mvc和elastisearch?我想实现一个类似于一般网站的网页(谷歌,雅虎searcg引擎),是否有任何教程或示例代码? 问题答案: 检出Spring Data Elasticsearch 项目。 这是一个示例应用程序。

  • 我试图使用Spring Data连接Elasticsearch 6.1(我使用Spring Boot) 但是提到最新版本只支持5.2。,有没有支持ES 6.1的替代方案? https://github.com/spring-projects/spring-data-elasticsearch/blob/master/README.md

  • 我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,java代码如下: 我在服务器中获取原始查询日志,如下所示: 根据查询日志,spring data elasticsearch将为查询添加大小限制