当前位置: 首页 > 知识库问答 >
问题:

我们如何在Testcontainers R2DBC中初始化模式?

长孙章横
2023-03-14

目前,我想为我的系统创建一个集成测试。我正在使用testcontainers生成我的临时数据库实例,并使用R2DBC数据库使我的系统具有反应性。问题是我不知道如何在R2DBC testcontainer实例中创建模式,在testcontainers网页中R2DBC支持和JDBC支持的文档中有明显的区别。在JDBC中,有一节在我们替换JDBC URL后创建模式,同时在R2DBC中,没有提到在我们替换R2DBC URL后创建模式。我在PostgreSQLR2DBCDatabaseContainer中尝试并探索了该方法,但没有成功。

我还使用spring boot作为我们的系统框架,通常我使用上下文配置初始化器替换URL。在我替换R2DBC的URL之后,有没有办法创建模式?

共有1个答案

颜乐
2023-03-14

您有以下选项来实现您想要的:

  1. 使用初始化脚本
  2. 使用init函数
  3. 将单例模式与一些迁移工具(如flyway或liquibase)结合使用

如果您使用的是Spring Boot,这里有一篇文章展示了它在单例模式中的使用:https://rieckpil.de/reuse-containers-with-testcontainers-for-fast-integration-tests/.

对于单例容器方法,您应该执行类似的操作:

public abstract class PostgresTestContainer {
           
  private final PostgreSQLContainer<?> postgresContainer =
                         new PostgreSQLContainer<>("postgres:13.3-alpine")
                                 .withDatabaseName("foo")
                                 .withUsername("foo")
                                 .withPassword("secret");

  static {
    postgresContainer.start();
  }

  @DynamicPropertySource
  private static void setDatasourceProperties(DynamicPropertyRegistry registry) {

    // JDBC DataSource Example
    registry.add("spring.datasource.url", postgresContainer::getJdbcUrl);
    registry.add("spring.datasource.password", postgresContainer::getPassword);
    registry.add("spring.datasource.username", postgresContainer::getUsername);

    // R2DBC DataSource Example
    registry.add("spring.r2dbc.url", () ->
            format("r2dbc:pool:postgresql://%s:%d/%s",
                        postgresContainer.getHost(),
                        postgresContainer.getFirstMappedPort(),
                        postgresContainer.getDatabaseName()));
    registry.add("spring.r2dbc.username", postgresContainer::getUsername);
    registry.add("spring.r2dbc.password", postgresContainer::getPassword);
  }
}
 类似资料:
  • 我正在用Java编程一个名词短语提取器,并试图使用OpenNLP库来标记名词。不幸的是,OpenNLP的文档非常混乱。目前,我只是在标记一串英文文本。文档中让我使用类似的方法初始化令牌模型: 我在这里困惑的是“en token.bin”是什么,以及在哪里可以找到它。它应该包含在压缩文件的原始下载中吗?还是我必须从OpenNLP的网站下载? 以下是文档的链接:https://opennlp.apac

  • 问题内容: 我无法按照以下代码初始化列表: 我遇到以下错误: 无法实例化类型 我该如何实例化? 问题答案: 如果你检查API,则会注意到它说: 作为一种手段,它无法实例化(不可能)。 如果你检查该链接,则会发现一些实现的: 所有已知的实施类: 那些可以实例化。使用它们的链接来了解有关它们的更多信息,即IE:知道哪个更适合你的需求。 三种最常用的可能是: 奖励: 你还可以使用,以更简单的方式使用值实

  • 问题内容: 我正在跟踪Swift和Objective-C Runtime,它适用于常规方法。 我喜欢使用init方法,据我了解,init就像一个类方法。因此,我尝试将初始化作为实例和类方法。但这似乎不起作用 我可以使用Objective C使其工作,只是想知道如何在Swift中使其工作 摘录自我的要旨 问题答案: 为方法创建选择器时,应使用Obj C方法签名作为选择器的基础,因为使用Obj C运行

  • 问题内容: 如何在PyTorch中的网络中初始化权重和偏差(例如,使用He或Xavier初始化)? 问题答案: 要初始化单层的权重,请使用中的函数。例如: 或者,您可以通过写入(是)来修改参数。例: 偏见也是如此: 或自定义 将初始化函数传递给。它将以递归方式初始化整个权重。 申请( FN ): 适用递归到每个子模块(通过返回的),以及自我。典型的用法包括初始化模型的参数(另请参见torch-nn

  • 问题内容: 我正在初始化这样的数组: NetBeans在此行指出一个错误: 我该如何解决这个问题? 问题答案: 上面的信息不正确(语法错误)。这意味着你正在分配一个仅可容纳元素的数组。 如果要初始化数组,请尝试使用: 注意两个声明之间的区别。将新数组分配给声明的变量时,new必须使用。 即使你纠正了语法,访问仍然是不正确的(你只能访问,因为Java中的数组索引是基于0的)。访问]将抛出。

  • 我想在HikariCP将所有连接添加到其池后开始我的服务。我正在使用Spring Boot。 我有一个很大的池大小,但是在启动应用程序时,HikariCP需要花费很多时间来添加连接,并且我会出现连接超时。