Spring Boot 测试容器

Posted

技术标签:

【中文标题】Spring Boot 测试容器【英文标题】:Spring boot test containers 【发布时间】:2021-10-19 06:18:19 【问题描述】:

是否可以将测试容器(即 oracle-xe)与 spring boot 一起使用,但将其用作本地部署的数据库。例如,让 spring boot 在开发配置文件中启动,并让测试容器也启动并成为用于敌人后端..

如果它被用于测试,我已经看到了一些示例,但随后它被拆除/关闭。

有什么想法吗?

更新:

所以我设法在测试容器中连线并启动它.. 设置了弹簧属性..

当 schema.sql 文件加载时,我得到一个错误 no privleges...我正在尝试创建一个新模式并向其中添加一些表..但它似乎不起作用..

“表空间'SYSTEM'没有权限”

CREATE USER PM3 IDENTIFIED by PM3

 

CREATE TABLE PM3.JOBS (

    JOB_ID NUMBER(3) NOT NULL,

    CUSTOMER_ID NUMBER(3) NOT NULL,

    DESCRIPTION VARCHAR(200),

    constraint PK_JOB_ID primary key (JOB_ID)

);

【问题讨论】:

【参考方案1】:

Testcontainers 的核心维护者之一 Sergei Egorov 在 his blog 上展示了如何实现这一目标。

它归结为在启动 Spring Boot 应用程序之前添加一个新的 Spring Boot 入口类和一个初始化程序。这样您就可以重用任何 Testcontainers 设置进行本地开发。

【讨论】:

这大致就是我想要的。然而,我确实使用类似的方法进行了管理,通过启动容器并设置数据源.. 来启动它,但我似乎无法让 spring 用 data.sql 填充测试容器数据库。我想知道是不是因为我动态设置了属性.. 你可以为你的问题添加一些代码提示吗? 我现在已经用更多信息更新了这个问题。【参考方案2】:

既然你可以manually control the lifecycle of the containers 这应该是完全可能的。如果develop 配置文件处于活动状态,只需添加一些启动和停止容器的代码。

【讨论】:

以上是关于Spring Boot 测试容器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 测试容器

测试容器在 Spring Boot 项目中启动两个容器而不是一个

如何创建 Spring Boot 测试套件

Spring Boot,测试容器以测试发送到外部数据库的查询

使用属性 server.port=0 运行 spock 测试时如何找到 Spring Boot 容器的端口

Spring Boot TestContainers 映射的端口只能在容器启动后获取