Ошибка при использовании БД TestContainers через URL JDBC, но работает с @Rule - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь использовать TestContainers для моих интеграционных тестов.Я начал использовать его для создания экземпляров таких объектов, как:

@ClassRule
public static PostgreSQLContainer postgres = (PostgreSQLContainer) new PostgreSQLContainer()
        .withDatabaseName("producto")
        .withInitScript("init.sql");

Таким образом, мои классы сущностей работают отлично.Но когда я попытался использовать его через URL JDBC, как описано здесь , я получил следующее исключение

rg.postgresql.util.PSQLException: ERROR: cross-database references are not implemented: "producto.producto.driver"

Я использую Spring Boot, поэтому я определяю следующие свойства вмой application.properties, чтобы воспользоваться преимуществами автоконфигурации Spring Boot (и больше не определять контейнер в коде):

spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDrive
spring.datasource.url=jdbc:tc:postgresql://somehostname:someport/producto?TC_INITSCRIPT=init.sql

Мой класс сущности определен как:

@Entity
@Table(name = "driver", schema = "producto", catalog = "producto")
public class DriverEntity { }

Я не знаюне понимаю, почему он работает при определении объекта, но не при использовании URL-адреса jdbc.

¿Нужно ли определять другие свойства?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

опечатка.

org.testcontainers.jdbc.ContainerDatabaseDrive должен быть org.testcontainers.jdbc.ContainerDatabaseDriver

0 голосов
/ 01 февраля 2019

При запуске с URL-адреса JDBC имя базы данных будет «test» (Testcontainers игнорирует имя базы данных из URL-адреса JDBC).

В вашем коде вы жестко кодируете имя базы данных, это не рекомендуется, посколькувы можете запускать ваше приложение в разных средах с разными именами баз данных.

Попробуйте удалить имя базы данных из аннотации.

...