首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JDBC URL使用TestContainers DB时出错,但可与@Rule一起使用

通过JDBC URL使用TestContainers DB时出错,但可与@Rule一起使用
EN

Stack Overflow用户
提问于 2019-02-01 07:25:42
回答 2查看 3.2K关注 0票数 2

我正在尝试使用TestContainers进行集成测试。我开始使用它来实例化对象,比如:

代码语言:javascript
复制
@ClassRule
public static PostgreSQLContainer postgres = (PostgreSQLContainer) new PostgreSQLContainer()
        .withDatabaseName("producto")
        .withInitScript("init.sql");

这样,我的实体类就可以完美地工作了。但是,当我尝试通过here描述的JDBC URL使用它时,我得到了以下异常

代码语言:javascript
复制
rg.postgresql.util.PSQLException: ERROR: cross-database references are not implemented: "producto.producto.driver"

我使用Spring Boot,所以我在application.properties中定义了以下属性来利用Spring Boot自动配置(不再在代码中定义容器):

代码语言:javascript
复制
spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDrive
spring.datasource.url=jdbc:tc:postgresql://somehostname:someport/producto?TC_INITSCRIPT=init.sql

我的实体类定义为:

代码语言:javascript
复制
@Entity
@Table(name = "driver", schema = "producto", catalog = "producto")
public class DriverEntity { }

我真的不明白为什么在定义对象时它会起作用,但在使用jdbc url时就不会了。

是否需要定义其他属性?

EN

回答 2

Stack Overflow用户

发布于 2019-02-02 00:06:34

当从JDBC URL启动时,数据库名称将是"test“(Testcontainers忽略JDBC URL中的数据库名称)。

在您的代码中,您硬编码数据库名称,这是不推荐的,因为您可能会在不同的环境中使用不同的数据库名称运行您的应用程序。

尝试从批注中删除数据库名称。

票数 1
EN

Stack Overflow用户

发布于 2019-02-26 08:53:01

打字错误。

org.testcontainers.jdbc.ContainerDatabaseDrive应为org.testcontainers.jdbc.ContainerDatabaseDriver

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54470759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档