搜索

1.3. 数据源集成

download PDF

1.3.1. 数据源健康检查

如果您使用 quarkus-smallrye-health 扩展,quarkus-agroal 和 reactive 客户端扩展会自动添加就绪度健康检查来验证数据源。

当您默认访问应用程序的健康状况就绪端点 /q/health/ready 时,您会收到数据源验证状态的信息。如果您有多个数据源,则会检查所有数据源验证失败,如果发生单一数据源验证失败,则状态将变为 DOWN

可以使用 quarkus.datasource.health.enabled 属性禁用此行为。

要只从健康检查中排除特定的数据源,请使用:

quarkus.datasource."datasource-name".health-exclude=true

1.3.2. 数据源指标

如果您使用 quarkus-micrometerquarkus-smallrye-metrics 扩展,quarkus-agroal 可以为指标 registry 提供一些与数据源相关的指标。这可以通过将 quarkus.datasource.metrics.enabled 属性设置为 true 来激活。

要使公开的指标包含任何实际值,则必须通过 Agroal 机制在内部启用指标集合。默认情况下,当指标扩展存在时,为所有数据源启用此指标集合机制,并且启用了 Agroal 扩展的指标。

要禁用特定数据源的指标,请将 quarkus.datasource.jdbc.enable-metrics 设置为 false,或为命名数据源应用 quarkus.datasource.<datasource name>.jdbc.enable-metrics。这将禁用收集指标,并在 /q/metrics 端点中公开它们(如果禁用了收集它们的机制)。

相反,将 quarkus.datasource.jdbc.enable-metrics 设置为 true,或 quarkus.datasource.<datasource name>.jdbc.enable-metrics 用于一个命名的数据源,即使指标扩展没有被使用。如果您需要以编程方式访问收集的指标,这非常有用。在注入的 AgroalDataSource 实例上调用 dataSource.getMetrics () 后可用。

如果禁用了此数据源的指标集合,则所有值都会为零。

1.3.3. 数据源追踪

要将追踪与数据源搭配使用,您需要为项目添加 quarkus-opentelemetry 扩展。

您不需要声明不同的驱动程序,因为您需要追踪。如果使用 JDBC 驱动程序,您需要按照 此处 OpenTelemetry 扩展中的说明进行操作。

即使所有追踪基础架构都默认不启用数据源追踪,而且您需要通过设置此属性来启用它:

# enable tracing
quarkus.datasource.jdbc.telemetry=true

1.3.4. Narayana 事务管理器集成

如果 Narayana JTA 扩展也可用,则会自动集成。

您可以通过设置 transactions 配置属性来覆盖它:

  • quarkus.datasource.jdbc.transactions 用于默认的未命名数据源
  • Quarkus.datasource. &lt;datasource-name& gt; .jdbc.transactions for named datasource

如需更多信息,请参阅下面的 配置参考部分

要使用 JDBC 促进数据库中存储事务日志,请参阅 使用 Quarkus 指南中的将事务日志配置为存储在使用事务 的数据源 部分中。

1.3.4.1. 命名数据源

使用 Dev Services 时,将始终创建默认数据源,但要指定命名数据源,您需要至少有一个构建时间属性,以便 Quarkus 能够检测如何创建数据源。

您通常会指定 db-kind 属性,或通过设置 quarkus.datasource."name".devservices.enabled=true 来显式启用 Dev Services。

1.3.5. 使用内存数据库进行测试

H2 和 Derby 等一些 数据库 通常用作快速运行集成测试的工具。

推荐的方法是使用您要在生产环境中使用的实际数据库,特别是 Dev Services 为测试提供零配置数据库,并对容器运行测试相对快速,并在实际环境中生成预期结果。但是,在需要运行简单集成测试时,也可以使用 JVM 支持的数据库。

1.3.5.1. 支持和限制

嵌入式数据库(H2 和 Derby)在 JVM 模式中工作。对于原生模式,会有以下限制:

  • Derby 无法嵌入到原生模式的应用程序中。但是,Quarkus Derby 扩展允许对 Derby JDBC 客户端 进行原生编译,支持 远程连接
  • 不建议将 H2 嵌入到您的原生镜像中。考虑使用替代方法,例如改为使用远程连接单独的数据库。

1.3.5.2. 运行集成测试

  1. 添加对工件的依赖,提供以下 Maven 协调下的额外工具:

    • io.quarkus:quarkus-test-h2 for H2
    • io.quarkus:quarkus-test-derby for Derby

      这将允许您测试应用,即使它被编译到原生可执行文件中,而数据库将作为 JVM 进程运行。

  2. 在集成测试中任何类添加以下特定注解,以便在 JVM 或原生可执行文件中运行集成测试:

    • @QuarkusTestResource(H2DatabaseTestResource.class)
    • @QuarkusTestResource(DerbyDatabaseTestResource.class)

      这样可确保测试套件根据测试执行所需的单独进程启动并终止受管数据库。

      H2 示例

      package my.app.integrationtests.db;
      
      import io.quarkus.test.common.QuarkusTestResource;
      import io.quarkus.test.h2.H2DatabaseTestResource;
      
      @QuarkusTestResource(H2DatabaseTestResource.class)
      public class TestResources {
      }

  3. 配置与受管数据库的连接:

    quarkus.datasource.db-kind=h2
    quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.