Spring testcontainers Driver org.testcontainers.jdb c .ContainerDatabaseDriver утверждает, что не принимает jdbcUrl - PullRequest
1 голос
/ 22 апреля 2020

Имея следующую конфигурацию для моих интеграционных тестов, я столкнулся со следующим исключением:

Driver org.testcontainers.jdbc.ContainerDatabaseDriver claims to not accept jdbcUrl, jdbc:postgresql://localhost:32864/test?loggerLevel=OFF

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = WebApplication.class)
@AutoConfigureMockMvc
@Testcontainers
@TestPropertySource(ResourceUtils.CLASSPATH_URL_PREFIX + "application-test.properties")
public abstract class AbstractIntegrationTest {

    @Autowired
    protected MockMvc mockMvc;

    @Container
    protected static PostgreSQLContainer<?> postgresqlContainer = new PostgreSQLContainer<>();

    @DynamicPropertySource
    static void postgresqlProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgresqlContainer::getJdbcUrl);
        registry.add("spring.datasource.username", postgresqlContainer::getUsername);
        registry.add("spring.datasource.password", postgresqlContainer::getPassword);
    }

    @Test
    void contextLoads() {
        Assertions.assertThat(mockMvc).isNotNull();
        Assertions.assertThat(postgresqlContainer.isRunning()).isTrue();
    }
}

postgresqlContainer.getJdbcUrl() возвращает jdbc:postgresql://localhost:32864/test?loggerLevel=OFF Но должно возвращаться jdbc:tc:postgresql://..., в нем отсутствует t c часть.

Есть какое-нибудь решение этой проблемы?

Жесткое кодирование, например: String.format("jdbc:tc:postgresql://localhost:%s/%s", postgresqlContainer.getFirstMappedPort(), postgresqlContainer.getDatabaseName()), похоже, работает.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 24 апреля 2020

Пожалуйста, посмотрите большое оранжевое предупреждение здесь: https://www.testcontainers.org/modules/databases/jdbc/

Вы должны использовать либо URL JDB C с префиксом tc: и ContainerDatabaseDriver, либо экземпляр контейнера с getJdbcUrl() и оригинальный драйвер (или пусть система определит драйвер для вас), а не оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...