由测试容器存储启动的 Ryuk 容器不会停止单例容器

2024-03-15

我有几个测试节点,但我将容器作为单例运行。


@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ContextConfiguration(initializers = ApplicationTests
                .DockerPostgresDataSourceInitializer.class)
public abstract class ApplicationTests {

   

    static PostgreSQLContainer<?> postgresSQLContainer;

    static {
        postgresSQLContainer = new PostgreSQLContainer<>("postgres:14")
                .withUsername("test")
                .withPassword("test")
                .withInitScript("sql/init.sql")
                .withDatabaseName("test")
                .withReuse(true);


        postgresSQLContainer.start();
    }

    public static class DockerPostgresDataSourceInitializer
            implements ApplicationContextInitializer<ConfigurableApplicationContext> {

        String jdbcUrl = "spring.datasource.url=" + postgresSQLContainer.getJdbcUrl();
        String username = "spring.datasource.username=" + postgresSQLContainer.getUsername();
        String password = "spring.datasource.password=" + postgresSQLContainer.getPassword();

        @Override
        public void initialize(@NotNull ConfigurableApplicationContext applicationContext) {

            TestPropertySourceUtils
                    .addInlinedPropertiesToEnvironment(applicationContext, jdbcUrl, username, password);
        }
    }



    @Test
    void contextLoads() throws SQLException {

        ResultSet resultSet = performQuery(postgresSQLContainer);
        resultSet.next();

        int columnIndex = 1;

        int columnAmountExpected = 1;

        int result = resultSet.getInt(columnIndex);
        assertEquals(columnAmountExpected, result);

        Assertions.assertThat(postgresSQLContainer.isRunning()).isTrue();
    }




    private ResultSet performQuery(@SuppressWarnings("rawtypes") PostgreSQLContainer postgreSQLContainer)
            throws SQLException {

        String query = "SELECT 1";

        String jdbcUrl = postgreSQLContainer.getJdbcUrl();
        String username = postgreSQLContainer.getUsername();
        String password = postgreSQLContainer.getPassword();

        Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
        return conn.createStatement().executeQuery(query);
    }
}

单例容器仅在基类加载时启动一次。然后,所有继承的测试类都可以使用该容器。在测试套件结束时,由 Testcontainers 核心启动的 Ryuk 容器将负责停止单例容器。

Ryuk 容器不会停止数据库容器。但他完成了他的工作。

也许有人对如何解决它有想法?


使用时withReuse(true)并且启用可重用模式后,Ryuk 不会删除容器。这是设计使然的。如果您希望 Ryuk 清洁容器,请不要使用可重用模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由测试容器存储启动的 Ryuk 容器不会停止单例容器 的相关文章

随机推荐

  • WiX 安装程序:使用 xslt 和 heat.exe 来更新属性

    我正在尝试为 Windows 服务创建 WiX 安装程序 并且我读到需要将所有文件的 KeyPath 设置为 no WiX 脚本中的 exe 除外 我目前正在使用 Heat exe 生成目录和文件结构 这是我的命令 WIX bin heat
  • 绘制路径大于最大位图尺寸

    我想画一条比canvas getMaximumBitmapWidth and or canvas getMaximumBitmapHeight 在可缩放的视图内 特别是在较旧的设备 Android 9 及更早版本 上 这会导致 路径太大而无
  • 当标签已存在于远程时​​,Git 强制推送标签

    我已经将标签推送到遥控器上 当另一个用户创建相同的标签并尝试推送时 推送将失败 因为该标签已存在于远程上 但我想如果我这么做了 f force tag push 它应该可以工作 但我所看到的并非如此 我想我必须这样做 Create tag
  • 是否应该迁移变更集的用户名和时间戳?

    以下文字关于OpsHub 迁移实用程序页面 https visualstudiogallery msdn microsoft com 28a90a17 d00c 4660 b7ae 42d58315ccf2表示用户名和时间戳将嵌入到迁移的变
  • 在 BIDS 中使用存储过程作为 OLE DB 源

    我正在测试 SSIS 包和存储过程 因为我只是一个初学者 我需要做的是使用在源数据库上安装的存储过程来返回数据集 然后我需要一个 ssis 包来使用存储过程返回的数据集作为 OLE DB 源来填充第二个目标表 基本上我有两张桌子 测试源 测
  • 可变参数模板的可扩展性

    我正在使用 C 11 开发一个大规模软件基础设施 该基础设施广泛使用了可变参数模板 我的问题如下 这种方法的可扩展性如何 首先 可变参数模板可以采用的参数数量是否有上限 其次 当使用许多参数时 并且 通过扩展 这些参数的许多组合将产生模板化
  • 在 Java 中用 Scala 中的 Option 包装返回 null 的方法?

    假设我有一个方法session get str String String但你不知道它会返回一个字符串还是一个 null 因为它来自 Java 在 Scala 中是否有更简单的方法来处理这个问题而不是session get foo null
  • 客户端加密的有效用例有哪些?

    我刚刚读到斯坦福大学 Javascript 加密库 http crypto stanford edu sjcl jsfiddle 示例 http jsfiddle net kRcNK 它完全用 JavaScript 支持 SHA256 AE
  • DICOM 和图像位置患者

    我试图弄清楚 DICOM 图像位置 0020 0032 是绝对坐标还是只是我拥有的任何切片方向的坐标 例如 我有两个平面 一个矢状平面和一个冠状平面 与 DICOM 标头中的 x y z 形式的相应图像位置 以毫米为单位 交错 我的问题是
  • 应用内结算,签名验证失败

    当我尝试获取订阅时 出现以下错误 签名认证失败 签名与数据不匹配 应用内结算警告 购买签名验证FAILED 不添加项目 我的代码是 String base64EncodedPublicKey MY KEY compute your publ
  • 我如何判断给定的 hWnd 是否仍然有效?

    我正在使用生成 Internet Explorer 实例的第三方类 该类有一个属性 hWnd 它返回进程的 hWnd 稍后 我可能想重用应用程序的实例 如果它仍然存在 因此我需要告诉我的帮助器类附加到它 在此之前 我想知道给定的 hWnd
  • 为什么我们需要绑定 std::cin 和 std::cout?

    默认情况下 标准输入设备与标准输出设备以以下形式绑定在一起 std cin tie std cout 这保证了在调用输入之前输出缓冲区已被刷新 所以我尝试使用来解开它们std cin tie 0 但看起来 结果 与并列的没有什么区别 inc
  • 如何使用另一个反应性对象 (ref) 的值设置反应性对象 (ref) 的值?

    我正在尝试设置 a 的值Form基于另一个反应变量中的数据 称为Product但它似乎不起作用 这Form应将其值设置为Product数据如果可用 如果不可用 则使用null 这是vue组件代码的一部分 props ProductID ty
  • CSS 动态创建列

    我有三个 div 要素 div class foo A div div class foo B div div class foo C div 期望的行为 我想编写一些CSS来随着屏幕尺寸的变化创建以下效果 不良行为 我知道如何实现以下 不
  • 如何增加数组的长度

    我有一个快速的问题 我在 java 中有一个整数数组 它的长度需要在整个类中变化 具体来说 我需要在某些情况下将其增加一 我这样尝试过 sbgHeadX new int numberOfSBG 当我需要时 我会增加整数变量 numberOf
  • JavaFX TableView scrollTo() 导致错误的行开始编辑

    我有一个可编辑的 TableView 其中有一个按钮添加新行 然后在该行的第一列上调用 table edit 当用户想要添加不在视口之外的行时 应该发生的情况是表格在视口内滚动新行并开始编辑 但是 调用 table scrollTo new
  • 在一天中的特定时间(例如,商店“营业时间”)显示 DIV

    我需要切换DIV基于时间的可见性 以便我的网站显示我的实体店何时营业 例如 07 00 15 59 显示 div 16 00 06 59 隐藏 div Thanks 这是一个基本示例 gets the current time var d
  • 如何在 MySQL 查询中使用正则表达式

    我有一个简单的任务 我需要搜索以字符串字符开头及其后一个数字的记录 我正在尝试的是这个 SELECT trecord FROM tbl WHERE trecord LIKE ALA d And SELECT trecord FROM tbl
  • 按 Enter 时未启动搜索活动

    按 Enter 时不会启动搜索活动 搜索视图在操作栏上显示得很好 但是当我输入搜索查询并按 Enter 键时 AndroidManifest xml
  • 由测试容器存储启动的 Ryuk 容器不会停止单例容器

    我有几个测试节点 但我将容器作为单例运行 ActiveProfiles test SpringBootTest webEnvironment SpringBootTest WebEnvironment RANDOM PORT AutoCon