gpt4 book ai didi

java - Spring boot、ElasticSearch 和 TestContainers 集成测试。连接被拒绝

转载 作者:行者123 更新时间:2023-12-02 01:43:47 39 4
gpt4 key购买 nike

我创建了一个集成测试,用于从 elasticsearch 检索数据。

我正在使用 testContainer 的默认值,因此我的 RestHighLevelClient 应该可以访问测试容器,但当我我正在尝试索引数据,但是当我通过命令在本地运行 docker 镜像时

docker run -d --rm -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "transport.host=127.0.0.1"  --name elastic docker.elastic.co/elasticsearch/elasticsearch:6.5.4

我的测试工作正常。

问题出在哪里,因为端口映射是一样的?这个异常的原因是什么?

我的测试:

@ExtendWith(SpringExtension.class)
@Testcontainers
@WebMvcTest
class FlowerResourceTest {

@Container
private ElasticsearchContainer esContainer = new ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch:6.5.4");

@Autowired
private ElasticsearchConfiguration esConfig;

@Autowired
private FlowerService flowerService;

private RestHighLevelClient client;


@Test
void test() throws IOException, InterruptedException {
client = esConfig.client();

var jsonFlower = "{\n" +
" \"name\": \"XXX\",\n" +
" \"color\" : \"red\"\n" +
"}";
IndexRequest indexRequest = new IndexRequest("flowers", "doc", "1")
.source(jsonFlower, XContentType.JSON);


assertTrue(esContainer.isRunning());
client.index(indexRequest, RequestOptions.DEFAULT);


var flowers = flowerService.findAll();


assertTrue(flowers.size() > 0);

DeleteRequest deleteRequest = new DeleteRequest("flowers", "doc", "1");

client.delete(deleteRequest, RequestOptions.DEFAULT);
}
}

最佳答案

如果我没记错的话,您可以使用以下命令请求公开的端口:

esContainer.getMappedPort(ELASTICSEARCH_PORT);

Docker 容器公开一个随机可用端口,因此请使用上述命令检查端口。为客户端使用该端口。如果您有兴趣,我的一位同事写了一篇关于此问题的博客文章,其中包含一些示例代码: https://www.luminis.eu/blog/search-en/elasticsearch-instances-for-integration-testing/

关于java - Spring boot、ElasticSearch 和 TestContainers 集成测试。连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028051/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com