Quarkus
包含于 R2D1 1.8.0
可选 R2D1 扩展将相同的集合 API 与 Quarkus CDI 配置连接。已验证的基线为 Quarkus 3.39.5 和 Java 21+;托管 JDBC 虚拟线程需要 Java 25+。
依赖项的适用范围
所有 Quarkus 集成都必须依赖:dev.nexcraft:r2d1-quarkus:1.8.0。它会传递引入 core dev.nexcraft:r2d1,因此无需单独声明 core。Quarkus 会根据扩展 descriptor 自动解析 r2d1-quarkus-deployment。
implementation("dev.nexcraft:r2d1-quarkus:1.8.0")Quarkus 应用使用 Quarkus platform/BOM 对齐框架版本。如果 Gradle plugin 或应用已导入 platform,请勿重复添加 BOM。
后端选择:基础 R2 + D1 组合使用 r2d1 中包含的 adapter。只有选择 filesystem 或 JDBC 后端时,才需要相应 adapter。
Filesystem + JDBC + H2 可选依赖
仅以下 filesystem + JDBC + H2 配置需要:两个 R2D1 adapter artifact、H2 JDBC driver,以及 Quarkus 管理 datasource 所需的 Agroal。其他数据库或应用自有 datasource 应使用对应的 driver/连接池。Quarkus 扩展版本由 Quarkus platform 管理。
implementation("dev.nexcraft:r2d1-filesystem:1.8.0")
implementation("dev.nexcraft:r2d1-jdbc:1.8.0")
implementation("io.quarkus:quarkus-jdbc-h2")
implementation("io.quarkus:quarkus-agroal")启用与配置
集成默认禁用。应用必须提供 CDI DocumentCodec,没有默认 JSON codec。通过构造器注入 R2D1 并使用通用集合 API。以下示例还需要应用拥有的 documents Executor 和选定的 Quarkus datasource。
quarkus.r2d1.enabled=true
quarkus.r2d1.document.type=filesystem
quarkus.r2d1.index.type=jdbc
quarkus.r2d1.filesystem.root-directory=./documents
quarkus.r2d1.filesystem.executor=documents
quarkus.r2d1.jdbc.datasource=selected
quarkus.datasource.selected.db-kind=h2
quarkus.datasource.selected.jdbc.url=jdbc:h2:mem:documents;DB_CLOSE_DELAY=-1
quarkus.datasource.selected.devservices.enabled=false
quarkus.r2d1.jdbc.max-concurrency=4
quarkus.r2d1.jdbc.max-pending=64应用 Bean 与资源所有权
应用的 facade、factory 和存储 Bean 可以替代默认 producer。自定义 IndexStore 需要对应的 CollectionInitializer。通过精确 CDI 名称或 Quarkus datasource 名称选择资源。应用提供的 client、executor 和 datasource 仅被借用;扩展创建的资源在关闭或启动失败时清理。
JDBC 默认使用有界平台线程执行。Java 25+ 可显式设置 quarkus.r2d1.jdbc.execution-mode=virtual-thread。命名 executor 不能与显式执行模式同时配置。集合 schema 延迟初始化。
Native image 验证
Filesystem/H2 CRUD 和索引查询已通过 JVM、打包 JVM 以及 GraalVM CE 25.0.2 / macOS arm64 native process 测试。文档类型需要显式注册 reflection。Smoke 应用包含 AWS CRT 0.48.4,用于解析 native checksum 类型。Linux CI、实际 Cloudflare 调用、R2/D1 native transport 和本地 adapter 源码 hot reload 尚未验证。
