微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与 testcontainers 和 redis 的连接超时

如何解决与 testcontainers 和 redis 的连接超时

我使用 Spring Boot、TestContainers、redis 和 Junit 5 进行集成测试。 我面临一个奇怪的行为,当我进行所有集成测试时,我一直显示此日志:

无法重新连接到 [localhost:55133]:连接被拒绝:localhost/127.0.0.1:55133

还有这个例外:

org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 1 minute(s)

at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:70)

但我单独运行测试,我没有这种行为。

我使用 junit5 并且我正在使用 junit5 扩展来启动和停止我的 redis 容器:

public class RedisTestContainerExtension implements BeforeAllCallback,AfterallCallback {

    private GenericContainer<?> redis;

    @Override
    public void beforeAll(ExtensionContext extensionContext) throws Exception {
        redis = new GenericContainer<>(DockerImageName.parse("redis:5.0.3-alpine"))
                .withCommand("redis-server","--requirepass","password")
                .waitingFor(Wait.forListeningPort())
                .withStartupTimeout(Duration.ofMinutes(2))
                .withExposedPorts(6379);
        redis.start();
        System.setProperty("APP_REdis_CONVERSATIONS_HOST",redis.getHost());
        System.setProperty("APP_REdis_CONVERSATIONS_PORT",redis.getFirstMappedPort().toString());
        System.setProperty("APP_REdis_CONVERSATIONS_PASSWORD","password");
        System.setProperty("APP_REdis_CONVERSATIONS_TTL","600m");
    }

    @Override
    public void afterall(ExtensionContext extensionContext) throws Exception {
        if(redis != null){
            redis.stop();
        }
    }
}

我将此文件添加为集成测试的扩展:

@ExtendWith({SpringExtension.class,RedisTestContainerExtension.class})
@SpringBoottest(classes = ConversationsApplication.class)
class MyIntegrationTest {
 ...
 }

谁能帮我解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。