1.3. 数据源集成
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-micrometer
或 quarkus-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. Narayana 事务管理器集成
如果 Narayana JTA 扩展也可用,则会自动集成。
您可以通过设置 transactions
配置属性来覆盖它:
-
quarkus.datasource.jdbc.transactions
用于默认的未命名数据源 -
Quarkus.datasource. <datasource-name& gt; .jdbc.transactions
for named datasource
如需更多信息,请参阅下面的 配置参考部分。
要使用 JDBC 促进数据库中存储事务日志,请参阅 使用 Quarkus 指南中的将事务日志配置为存储在使用事务 的数据源 部分中。
1.3.3.1. 命名数据源
使用 Dev Services 时,将始终创建默认数据源,但要指定命名数据源,您需要至少有一个构建时间属性,以便 Quarkus 能够检测如何创建数据源。
您通常会指定 db-kind
属性,或通过设置 quarkus.datasource."name".devservices.enabled=true
来显式启用 Dev Services。
1.3.4. 使用内存数据库进行测试
H2 和 Derby 等一些 数据库 通常用作快速运行集成测试的工具。
推荐的方法是使用您要在生产环境中使用的实际数据库,特别是 Dev Services 为测试提供零配置数据库,并对容器运行测试相对快速,并在实际环境中生成预期结果。但是,在需要运行简单集成测试时,也可以使用 JVM 支持的数据库。
1.3.4.1. 支持和限制
嵌入式数据库(H2 和 Derby)在 JVM 模式中工作。对于原生模式,会有以下限制:
- Derby 无法嵌入到原生模式的应用程序中。但是,Quarkus Derby 扩展允许对 Derby JDBC 客户端 进行原生编译,支持 远程连接。
- 不建议将 H2 嵌入到您的原生镜像中。考虑使用替代方法,例如改为使用远程连接单独的数据库。
1.3.4.2. 运行集成测试
添加对工件的依赖,提供以下 Maven 协调下的额外工具:
-
io.quarkus:quarkus-test-h2
for H2 io.quarkus:quarkus-test-derby
for Derby这将允许您测试应用,即使它被编译到原生可执行文件中,而数据库将作为 JVM 进程运行。
-
在集成测试中任何类添加以下特定注解,以便在 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 { }
-
配置与受管数据库的连接:
quarkus.datasource.db-kind=h2 quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test