As Redis больше не является открытым исходным кодом, я решил реализовать кэширование с Valkey 8.0.0.
Но у меня возникают проблемы Настройка Testcointers, и теперь мне интересно, что я делаю неправильно, и если бы мне в любом случае использовал более старую версию Redis с открытым исходным кодом или переключиться на какой -то другой магазин значений с открытым исходным кодом, который имеет лучшую документацию. Я не уверен, насколько популярен Valkey даже на данный момент. Контейнер Valkey по сравнению с Redis One. < /p>
Вот мой код < /p>
Код: Выделить всё
@ActiveProfiles("integration-test")
@Testcontainers
@SpringBootTest
@AutoConfigureMockMvc
@Slf4j
public abstract class BaseIntegrationTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
protected IntegrationTestDataConfig integrationTestDataConfig;
@Container
@ServiceConnection
static final PostgreSQLContainer POSTGRES_CONTAINER = new PostgreSQLContainer("postgres:latest")
.withDatabaseName("testdb")
.withUsername("test")
.withPassword("test");
@Container
static final GenericContainer valkeyContainer = new GenericContainer("valkey/valkey:8.0.0")
.withExposedPorts(6379)
.withCommand("valkey-server", "/etc/valkey/valkey.conf")
.withClasspathResourceMapping("config/valkey.conf", "/etc/valkey/valkey.conf", BindMode.READ_ONLY)
.waitingFor(Wait.forLogMessage(".*Ready to accept connections.*\\n", 1));
@DynamicPropertySource
static void registerValkeyProperties(DynamicPropertyRegistry registry) {
registry.add("spring.data.redis.host", valkeyContainer::getHost);
registry.add("spring.data.redis.port", () -> valkeyContainer.getMappedPort(6379));
}
}
< /code>
Как вы можете использовать, я использую GenericContainer, я не уверен, использую ли я правильный comand, копируя файл конфигурации или этот Unnesecary Alltogether < /p>
это файл conf < /p>
bind 0.0.0.0 -::1
protected-mode no
< /code>
И это свойства .yml, которые должны быть перезаписаны для тестовой среды: < /p>
spring:
data:
redis:
host: ${VALKEY_HOST:}
port: ${VALKEY_PORT:}
password: ${VALKEY_PASSWORD:}
< /code>
В настоящее время тестовый контейнер начинается нормально, но моя фабрика подключения салата, похоже, не может разрешить адрес и порт < /p>
2025-02-25T11:35:11.159+01:00 INFO 15996 --- [xecutorLoop-1-2] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was localhost/127.0.0.1:52306
2025-02-25T11:35:11.168+01:00 WARN 15996 --- [ioEventLoop-6-2] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect to [localhost/:52306]: Connection closed prematurely
< /code>
Я подтвердил через журналы, что случайно отображенный порт (например, 52306) такой же, как valkeycontainer.getmapedport (6379), но соединение не работает почти сразу. Я не уверен, использую ли я правильную команду (valkey-server /etc/valkey/valkey.conf), если содержание valkey.conf верно, или если есть дополнительная переменная среды, требуемая Valkey.
[list]
[*] Я правильно использую GenericContainer, или есть конкретные контейнеры Redis или Valkey, которые я должен использовать вместо этого? < /p>
< /li>
Является ли мой файл congig? < /p>
< /li>
Я использую правильные свойства В моем файле .yml? вдоль Форма)?
[*] Я попытался использовать rediscontainers, но TestContainer даже не начал бы
[*] Используется различные конфигурации Bind, например, Bind 127.0.0.1 -:: 1 [*] Добавленная startuptimeout of 10 секунд
[/list]
Подробнее здесь: https://stackoverflow.com/questions/794 ... ner-config