编辑此页面

使用 MongoDB 客户端

MongoDB 是一个广为人知的 NoSQL 数据库,使用非常广泛。

在本指南中,我们将介绍如何让您的 REST 服务使用 MongoDB 数据库。

先决条件

要完成本指南,您需要

  • 大约 15 分钟

  • 一个 IDE

  • 已安装 JDK 17+ 并正确配置了 JAVA_HOME

  • Apache Maven 3.9.9

  • 如果您想使用它,可以选择 Quarkus CLI

  • 如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置

  • 已安装 MongoDB 或已安装 Docker

架构

本指南中构建的应用程序非常简单:用户可以使用表单在列表中添加元素,并且列表会更新。

浏览器和服务器之间的所有信息都以 JSON 格式格式化。

元素存储在 MongoDB 中。

解决方案

我们建议您按照以下章节中的说明,逐步创建应用程序。但是,您可以直接转到完整的示例。

克隆 Git 存储库:git clone https://github.com/quarkusio/quarkus-quickstarts.git,或者下载一个存档

解决方案位于 mongodb-quickstart 目录中。

创建 Maven 项目

首先,我们需要一个新项目。使用以下命令创建一个新项目

CLI
quarkus create app org.acme:mongodb-quickstart \
    --extension='rest-jackson,mongodb-client' \
    --no-code
cd mongodb-quickstart

要创建 Gradle 项目,请添加 --gradle--gradle-kotlin-dsl 选项。

有关如何安装和使用 Quarkus CLI 的更多信息,请参阅 Quarkus CLI 指南。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:3.24.4:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=mongodb-quickstart \
    -Dextensions='rest-jackson,mongodb-client' \
    -DnoCode
cd mongodb-quickstart

要创建 Gradle 项目,请添加 -DbuildTool=gradle-DbuildTool=gradle-kotlin-dsl 选项。

对于 Windows 用户

  • 如果使用 cmd,(不要使用反斜杠 \ 并将所有内容放在同一行上)

  • 如果使用 Powershell,请将 -D 参数用双引号括起来,例如 "-DprojectArtifactId=mongodb-quickstart"

此命令生成一个 Maven 结构,导入 Quarkus REST(以前称为 RESTEasy Reactive)、Jackson 和 MongoDB 客户端扩展。之后,quarkus-mongodb-client 扩展已添加到您的构建文件中。

如果您已配置 Quarkus 项目,则可以通过在项目根目录中运行以下命令将 mongodb-client 扩展添加到您的项目中

CLI
quarkus extension add mongodb-client
Maven
./mvnw quarkus:add-extension -Dextensions='mongodb-client'
Gradle
./gradlew addExtension --extensions='mongodb-client'

这会将以下内容添加到您的 pom.xml

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-mongodb-client</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-mongodb-client")

创建您的第一个 JSON REST 服务

在此示例中,我们将创建一个应用程序来管理水果列表。

首先,让我们创建 Fruit bean 如下

package org.acme.mongodb;

import java.util.Objects;

public class Fruit {

    private String name;
    private String description;
    private String id;

    public Fruit() {
    }

    public Fruit(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Fruit)) {
            return false;
        }

        Fruit other = (Fruit) obj;

        return Objects.equals(other.name, this.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(this.name);
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

没什么特别的。需要注意的重要一点是,JSON 序列化层需要一个默认构造函数。

现在创建一个 org.acme.mongodb.FruitService,它将成为我们应用程序的业务层,并负责从 MongoDB 数据库存储/加载水果。

package org.acme.mongodb;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.ArrayList;
import java.util.List;

@ApplicationScoped
public class FruitService {

    @Inject MongoClient mongoClient;

    public List<Fruit> list(){
        List<Fruit> list = new ArrayList<>();
        MongoCursor<Document> cursor = getCollection().find().iterator();

        try {
            while (cursor.hasNext()) {
                Document document = cursor.next();
                Fruit fruit = new Fruit();
                fruit.setName(document.getString("name"));
                fruit.setDescription(document.getString("description"));
                list.add(fruit);
            }
        } finally {
            cursor.close();
        }
        return list;
    }

    public void add(Fruit fruit){
        Document document = new Document()
                .append("name", fruit.getName())
                .append("description", fruit.getDescription());
        getCollection().insertOne(document);
    }

    private MongoCollection getCollection(){
        return mongoClient.getDatabase("fruit").getCollection("fruit");
    }
}

现在,按如下方式创建 org.acme.mongodb.FruitResource

@Path("/fruits")
public class FruitResource {

    @Inject FruitService fruitService;

    @GET
    public List<Fruit> list() {
        return fruitService.list();
    }

    @POST
    public List<Fruit> add(Fruit fruit) {
        fruitService.add(fruit);
        return list();
    }
}

实现非常简单,您只需要使用 Jakarta REST 注解定义您的端点,并使用 FruitService 来列出/添加新水果。

配置 MongoDB 数据库

要配置的主要属性是访问 MongoDB 实例的 URL。几乎所有配置都可以包含在连接 URI 中,因此我们建议这样做。您可以在 MongoDB 文档中找到更多信息:https://docs.mongodb.com/manual/reference/connection-string/

示例配置应如下所示

# configure the mongoDB client for a replica set of two nodes
quarkus.mongodb.connection-string = mongodb://mongo1:27017,mongo2:27017

在此示例中,我们使用的是在本地主机上运行的单个实例

# configure the mongoDB client for a single instance on localhost
quarkus.mongodb.connection-string = mongodb://:27017

解析 mongo+srv:// URL

使用 mongo+srv:// URL 时,MongoDB 驱动程序会解析 DNS SRV 记录以检索要连接的主机列表。默认情况下,它依赖于使用 JNDI 实现的 DNS 客户端。

出于安全原因,Quarkus 会限制应用程序内的 JNDI 使用,以帮助缓解潜在的漏洞,例如 Log4Shell。为了支持 mongo+srv://,Quarkus 提供了一个替代的 DNS 客户端。

但是,在某些环境中,此替代 DNS 客户端可能无法解析 SRV 记录。如果遇到此类问题,可以通过设置以下属性来恢复到 MongoDB 驱动程序的默认 DNS 客户端

quarkus.naming.enable-jndi=true
quarkus.class-loading.removed-resources."io.quarkus\:quarkus-mongodb-client"=META-INF/services/com.mongodb.spi.dns.DnsClientProvider

这会恢复 MongoDB 驱动程序使用的默认基于 JNDI 的解析机制。

使用 MongoDB 开发服务

请参阅 MongoDB 开发服务

多个 MongoDB 客户端

MongoDB 允许您配置多个客户端。使用多个客户端与使用单个客户端方式相同。

quarkus.mongodb.connection-string = mongodb://login:pass@mongo1:27017/database

quarkus.mongodb.users.connection-string = mongodb://mongo2:27017/userdb
quarkus.mongodb.inventory.connection-string = mongodb://mongo3:27017/invdb,mongo4:27017/invdb

请注意,键中有一个额外的部分(usersinventory 段)。语法如下:quarkus.mongodb.[可选名称.][mongo 连接属性]。如果省略了名称,则配置默认客户端。

多个 MongoDB 客户端的使用通过允许连接到多个 MongoDB 集群来实现 MongoDB 的多租户。
如果您想连接到同一集群中的多个数据库,则无需多个客户端,因为单个客户端可以访问同一集群中的所有数据库(就像 JDBC 连接可以访问同一数据库中的多个模式一样)。

命名 MongoDB 客户端注入

使用多个客户端时,每个 MongoClient,您都可以使用 io.quarkus.mongodb.MongoClientName 限定符选择要注入的客户端。使用上面的属性配置三个不同的客户端,您也可以如下注入每个客户端

@Inject
MongoClient defaultMongoClient;

@Inject
@MongoClientName("users")
MongoClient mongoClient1;

@Inject
@MongoClientName("inventory")
ReactiveMongoClient mongoClient2;

运行 MongoDB 数据库

默认情况下,MongoClient 配置为访问端口 27017 上的本地 MongoDB 数据库(默认 MongoDB 端口),如果您在此端口上有本地运行的数据库,那么在可以测试它之前,无需再做任何事情!

如果您想使用 Docker 运行 MongoDB 数据库,可以使用以下命令启动一个

docker run -ti --rm -p 27017:27017 mongo:4.4

如果您使用 开发服务,则无需手动启动容器。

创建一个前端

现在让我们添加一个简单的网页来与我们的 FruitResource 进行交互。Quarkus 会自动服务位于 META-INF/resources 目录下的静态资源。在 src/main/resources/META-INF/resources 目录中,添加一个 fruits.html 文件,其中包含此fruits.html 文件中的内容。

您现在可以与您的 REST 服务交互

  • 使用以下命令启动 Quarkus

    CLI
    quarkus dev
    Maven
    ./mvnw quarkus:dev
    Gradle
    ./gradlew --console=plain quarkusDev
  • 打开浏览器访问 https://:8080/fruits.html

  • 通过表单将新水果添加到列表中

响应式 MongoDB 客户端

Quarkus 中包含了一个响应式 MongoDB 客户端。使用它和使用经典 MongoDB 客户端一样简单。您可以按如下方式重写前面的示例以使用它。

Mutiny

MongoDB 响应式客户端使用 Mutiny 响应式类型。如果您不熟悉 Mutiny,请查看 Mutiny - 直观的响应式编程库

package org.acme.mongodb;

import io.quarkus.mongodb.reactive.ReactiveMongoClient;
import io.quarkus.mongodb.reactive.ReactiveMongoCollection;
import io.smallrye.mutiny.Uni;
import org.bson.Document;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.List;

@ApplicationScoped
public class ReactiveFruitService {

    @Inject
    ReactiveMongoClient mongoClient;

    public Uni<List<Fruit>> list() {
        return getCollection().find()
                .map(doc -> {
                    Fruit fruit = new Fruit();
                    fruit.setName(doc.getString("name"));
                    fruit.setDescription(doc.getString("description"));
                    return fruit;
                }).collect().asList();
    }

    public Uni<Void> add(Fruit fruit) {
        Document document = new Document()
                .append("name", fruit.getName())
                .append("description", fruit.getDescription());
        return getCollection().insertOne(document)
                .onItem().ignore().andContinueWithNull();
    }

    private ReactiveMongoCollection<Document> getCollection() {
        return mongoClient.getDatabase("fruit").getCollection("fruit");
    }
}
package org.acme.mongodb;

import io.smallrye.mutiny.Uni;

import java.util.List;

import jakarta.inject.Inject;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.core.MediaType;

@Path("/reactive_fruits")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ReactiveFruitResource {

    @Inject
    ReactiveFruitService fruitService;

    @GET
    public Uni<List<Fruit>> list() {
        return fruitService.list();
    }

    @POST
    public Uni<List<Fruit>> add(Fruit fruit) {
        return fruitService.add(fruit)
                .onItem().ignore().andSwitchTo(this::list);
    }
}

使用 BSON codec 简化 MongoDB 客户端使用

通过使用 Bson Codec,MongoDB 客户端将自动处理您的域对象与 MongoDB Document 之间的转换。

首先,您需要创建一个 Bson Codec,它会告诉 Bson 如何自动将您的实体转换为 MongoDB Document 或从 MongoDB Document 转换回来。这里我们使用 CollectibleCodec,因为我们的对象可以从数据库中检索(它有一个 MongoDB 标识符),否则我们将使用 Codec。有关 codec 文档的更多信息:https://mongodb.ac.cn/docs/drivers/java/sync/current/fundamentals/data-formats/codecs/

package org.acme.mongodb.codec;

import com.mongodb.MongoClientSettings;
import org.acme.mongodb.Fruit;
import org.bson.Document;
import org.bson.BsonWriter;
import org.bson.BsonValue;
import org.bson.BsonReader;
import org.bson.BsonString;
import org.bson.codecs.Codec;
import org.bson.codecs.CollectibleCodec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;

import java.util.UUID;

public class FruitCodec implements CollectibleCodec<Fruit> {

    private final Codec<Document> documentCodec;

    public FruitCodec() {
        this.documentCodec = MongoClientSettings.getDefaultCodecRegistry().get(Document.class);
    }

    @Override
    public void encode(BsonWriter writer, Fruit fruit, EncoderContext encoderContext) {
        Document doc = new Document();
        doc.put("name", fruit.getName());
        doc.put("description", fruit.getDescription());
        documentCodec.encode(writer, doc, encoderContext);
    }

    @Override
    public Class<Fruit> getEncoderClass() {
        return Fruit.class;
    }

    @Override
    public Fruit generateIdIfAbsentFromDocument(Fruit document) {
        if (!documentHasId(document)) {
            document.setId(UUID.randomUUID().toString());
        }
        return document;
    }

    @Override
    public boolean documentHasId(Fruit document) {
        return document.getId() != null;
    }

    @Override
    public BsonValue getDocumentId(Fruit document) {
        return new BsonString(document.getId());
    }

    @Override
    public Fruit decode(BsonReader reader, DecoderContext decoderContext) {
        Document document = documentCodec.decode(reader, decoderContext);
        Fruit fruit = new Fruit();
        if (document.getString("id") != null) {
            fruit.setId(document.getString("id"));
        }
        fruit.setName(document.getString("name"));
        fruit.setDescription(document.getString("description"));
        return fruit;
    }
}

然后,您需要创建一个 CodecProvider 来将此 Codec 链接到 Fruit 类。

package org.acme.mongodb.codec;

import org.acme.mongodb.Fruit;
import org.bson.codecs.Codec;
import org.bson.codecs.configuration.CodecProvider;
import org.bson.codecs.configuration.CodecRegistry;

public class FruitCodecProvider implements CodecProvider {
    @Override
    public <T> Codec<T> get(Class<T> clazz, CodecRegistry registry) {
        if (clazz.equals(Fruit.class)) {
            return (Codec<T>) new FruitCodec();
        }
        return null;
    }

}

Quarkus 会自动为您注册 CodecProvider,将其作为 @Singleton 范围的 CDI bean。

最后,从数据库获取 MongoCollection 时,您可以直接使用 Fruit 类而不是 Document 类,codec 会自动将 Document 与您的 Fruit 类进行映射。

以下是使用 MongoCollectionFruitCodec 的示例。

package org.acme.mongodb;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.ArrayList;
import java.util.List;

@ApplicationScoped
public class CodecFruitService {

    @Inject MongoClient mongoClient;

    public List<Fruit> list(){
        List<Fruit> list = new ArrayList<>();
        MongoCursor<Fruit> cursor = getCollection().find().iterator();

        try {
            while (cursor.hasNext()) {
                list.add(cursor.next());
            }
        } finally {
            cursor.close();
        }
        return list;
    }

    public void add(Fruit fruit){
        getCollection().insertOne(fruit);
    }

    private MongoCollection<Fruit> getCollection(){
        return mongoClient.getDatabase("fruit").getCollection("fruit", Fruit.class);
    }
}

POJO Codec

POJO Codec 提供了一组注解,可用于自定义 POJO 如何映射到 MongoDB 集合,并且此 codec 会由 Quarkus 自动初始化。此 codec 还支持 Java records,因此您可以将它们用于您的 POJO 或 POJO 的属性。

其中一个注解是 @BsonDiscriminator 注解,它允许通过在文档中添加一个标识符字段来将多个 Java 类型存储在单个 MongoDB 集合中。这在处理抽象类型或接口时非常有用。

Quarkus 会自动将所有带有 @BsonDiscriminator 注解的类注册到 POJO codec。

POJO Codec 通过 PropertyCodecProvider 增强了泛型支持,Quarkus 会自动将任何 PropertyCodecProvider 注册到 POJO Codec(这些类会自动成为 @Singleton 范围的 CDI bean)。在构建原生可执行文件并使用泛型类型时,您可能需要为反射注册类型参数。

使用 Panache 简化 MongoDB

MongoDB with Panache 扩展通过提供像 Hibernate ORM with Panache 中那样的活动记录样式实体(和存储库)来简化 MongoDB 的使用,并专注于使您的实体在 Quarkus 中编写起来既简单又有趣。

使用 Liquibase 进行模式迁移

Liquibase MongoDB 扩展简化了 MongoDB 数据库的初始化,包括索引和初始数据。它实现了 Liquibase 为 SQL 数据库提供的相同的模式迁移功能。

连接健康检查

如果您使用 quarkus-smallrye-health 扩展,quarkus-mongodb-client 将自动添加一个就绪健康检查来验证与集群的连接。

因此,当您访问应用程序的 /q/health/ready 端点时,您将获得有关连接验证状态的信息。

可以通过在 application.properties 中将 quarkus.mongodb.health.enabled 属性设置为 false 来禁用此行为。

指标

如果您使用 quarkus-micrometerquarkus-smallrye-metrics 扩展,quarkus-mongodb-client 可以提供有关连接池的指标。此行为必须首先在 application.properties 中将 quarkus.mongodb.metrics.enabled 属性设置为 true 来启用。

因此,当您访问应用程序的 /q/metrics 端点时,您将获得有关连接池状态的信息。在使用 SmallRye Metrics 时,连接池指标将在 vendor 范围内可用。

追踪

要使用 MongoDB 进行追踪,您需要将 quarkus-opentelemetry 扩展添加到您的项目中。

即使所有追踪基础设施都已就绪,mongodb 追踪默认情况下也是禁用的,您需要通过设置此属性来启用它

# enable tracing
quarkus.mongodb.tracing.enabled=true

测试辅助

MongoDB 的开发服务是为您的单元测试启动 MongoDB 数据库的最佳选择。

但是,如果您无法使用它,您可以使用 Quarkus 提供的两个 QuarkusTestResourceLifecycleManager 中的一个来启动 MongoDB 数据库。它们依赖于 Flapdoodle 嵌入式 MongoDB

  • io.quarkus.test.mongodb.MongoTestResource 将在端口 27017 上启动单个实例。

  • io.quarkus.test.mongodb.MongoReplicaSetTestResource 将启动一个副本集,包含两个实例,一个在端口 27017,另一个在端口 27018。

要使用它们,您需要将 io.quarkus:quarkus-test-mongodb 依赖项添加到您的 pom.xml 中。

有关 QuarkusTestResourceLifecycleManager 用法的更多信息,请阅读 Quarkus 测试资源

要设置 MongoDB 启动时要监听的所需端口,应使用以下代码

@QuarkusTestResource(value = MongoTestResource.class, initArgs = @ResourceArg(name = MongoTestResource.PORT, value = "27017"))

要设置要启动的所需 MongoDB 版本,应使用以下代码

@QuarkusTestResource(value = MongoTestResource.class, initArgs = @ResourceArg(name = MongoTestResource.VERSION, value = "V5_0"))

使用的字符串值可以是 de.flapdoodle.embed.mongo.distribution.Versionde.flapdoodle.embed.mongo.distribution.Version.Main 枚举中的任何一个。如果未指定版本,则默认使用 Version.Main.V4_0

旧版客户端

我们默认不包含旧版 MongoDB 客户端。它包含已退休的 MongoDB Java API (DB, DBCollection, …) 和已被 com.mongodb.client.MongoClient 取代的 com.mongodb.MongoClient

如果您想使用旧版 API,需要将以下依赖项添加到您的构建文件中

pom.xml
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-legacy</artifactId>
</dependency>
build.gradle
implementation("org.mongodb:mongodb-driver-legacy")

TLS 配置

如果您想使用 SSL/TLS 加密,需要在 application.properties 中添加此属性

quarkus.mongodb.tls=true

您还可以将客户端配置为使用 TLS 注册表中的 TLS 配置,这将启用 tls

quarkus.tls.mongo.trust-store.pem.certs=certa.pem,certb.pem
quarkus.mongodb.tls-configuration-name=mongo

您可以将客户端配置为信任具有无效主机名的证书的服务器

quarkus.tls.mongo.hostname-verification-algorithm=NONE
quarkus.mongodb.tls-configuration-name=mongo

构建本机可执行文件

您可以在原生可执行文件中使用 MongoDB 客户端。

您可以使用常用命令构建本机可执行文件

CLI
quarkus build --native
Maven
./mvnw install -Dnative
Gradle
./gradlew build -Dquarkus.native.enabled=true

运行它就像执行 ./target/mongodb-quickstart-1.0.0-SNAPSHOT-runner 一样简单。

然后,您可以将您的浏览器指向 https://:8080/fruits.html 并使用您的应用程序。

目前,Quarkus 在原生模式下不支持 客户端字段级加密

如果在原生模式下运行应用程序时遇到以下错误
无法编码“MyObject”。编码“myVariable”时出错:找不到类 org.acme.MyVariable 的 codec。
这意味着 org.acme.MyVariable 类对 GraalVM 是未知的,补救措施是向 MyVariable 类添加 @RegisterForReflection 注解。有关 @RegisterForReflection 注解的更多详细信息,请参阅 原生应用程序提示页面。

以编程方式自定义 MongoDB 客户端配置

如果您需要以编程方式自定义 MongoDB 客户端配置,则需要实现 io.quarkus.mongodb.runtime.MongoClientCustomizer 接口并将其作为 CDI application scoped bean 公开

@ApplicationScoped
public class MyCustomizer implements MongoClientCustomizer {

    @Override
    public MongoClientSettings.Builder customize(MongoClientSettings.Builder builder) {
        return builder.applicationName("my-app");
    }
}

该 bean 可以通过使用 @MongoClientName 限定符来指示客户端名称来定制特定客户端。当没有限定符时,它会定制默认客户端。每个客户端最多只能使用一个定制器。如果检测到多个针对同一客户端的定制器,则会在构建时抛出异常。

此功能可用于配置客户端字段级加密 (CSFLE)。请遵循 MongoDB 网站上的说明来配置 CSFLE

@ApplicationScoped
public class MyCustomizer implements MongoClientCustomizer {
    @Override
    public MongoClientSettings.Builder customize(MongoClientSettings.Builder builder) {
        Map<String, Map<String, Object>> kmsProviders = getKmsProviders();
        String dek = getDataEncryptionKey();
        Map<String, BsonDocument> schema = getSchema(dek);

        Map<String, Object> extraOptions = new HashMap<>();
        extraOptions.put("cryptSharedLibPath", "<path to crypt shared library>");

        return builder.autoEncryptionSettings(AutoEncryptionSettings.builder()
                .keyVaultNamespace(KEY_VAULT_NAMESPACE)
                .kmsProviders(kmsProviders)
                .schemaMap(schemaMap)
                .extraOptions(extraOptions)
                .build());
    }
}
客户端字段级加密以及通常依赖于 Mongo Crypt 的功能,在原生模式下不受支持。

配置参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

如果 smallrye-health 扩展存在,是否发布健康检查。

环境变量:QUARKUS_MONGODB_HEALTH_ENABLED

显示更多

布尔值

true

如果存在指标扩展,是否发布指标。

环境变量:QUARKUS_MONGODB_METRICS_ENABLED

显示更多

布尔值

false

如果设置为 true,即使没有使用它们的注入点,也将始终创建默认客户端

环境变量:QUARKUS_MONGODB_FORCE_DEFAULT_CLIENTS

显示更多

布尔值

false

如果存在 quarkus-opentelemetry 扩展,驱动程序命令的追踪跨度是否被发送。

环境变量:QUARKUS_MONGODB_TRACING_ENABLED

显示更多

布尔值

false

配置连接字符串。格式为:mongodb://[username:password@]host1[:port1][,host2[:port2],…​[,hostN[:portN]]][/[database.collection][?options]]

mongodb:// 是标识连接字符串为标准格式所必需的前缀。

username:password@ 是可选的。如果提供了,驱动程序将在连接到数据库服务器后尝试登录到数据库。对于某些身份验证机制,只指定用户名而不指定密码,在这种情况下,用户名后的 ":" 也会被省略。

host1 是连接字符串的唯一必需部分。它标识要连接的服务器地址。

:portX 是可选的,如果未提供,则默认为 :27017。

/database 是要登录的数据库的名称,因此只有在使用 username:password@ 语法时才相关。如果未指定,则默认使用 admin 数据库。

?options 是连接选项。请注意,如果 database 缺失,在最后一个主机和引入选项的 ? 之间仍然需要一个 /。选项是 name=value 对,并且对之间用 "&" 分隔。

另一种格式是使用 mongodb+srv 协议

mongodb+srv://[username:password@]host[/[database][?options]]
  • mongodb+srv:// 是此格式必需的前缀。

  • username:password@ 是可选的。如果提供了,驱动程序将在连接到数据库服务器后尝试登录到数据库。对于某些身份验证机制,只指定用户名而不指定密码,在这种情况下,用户名后的 ":" 也会被省略

  • host 是 URI 的唯一必需部分。它标识一个主机名,该主机名在主名前加上 "_mongodb._tcp" 后从域名服务器查找 SRV 记录。每个 SRV 记录的主机/端口成为连接使用的种子列表,就像它们在 URI 中使用普通 mongodb 协议作为主机/端口对提供一样。

  • /database 是要登录的数据库的名称,因此只有在使用 username:password@ 语法时才相关。如果未指定,则默认使用 "admin" 数据库。

  • ?options 是连接选项。请注意,如果 database 缺失,在最后一个主机和引入选项的 ? 之间仍然需要一个 /。选项是 name=value 对,并且对之间用 "&" 分隔。此外,使用 mongodb+srv 协议,会从域名服务器查找给定主机的 TXT 记录,并且其中每个记录的文本值都会添加到 URI 本身的任何选项之前。因为任何选项的最后一个指定值都会生效,这意味着 URI 上提供的选项将覆盖通过 TXT 记录提供的任何选项。

环境变量:QUARKUS_MONGODB_CONNECTION_STRING

显示更多

字符串

配置 MongoDB 服务器地址(单个模式下为 1 个)。地址以 host:port 形式传递。

环境变量:QUARKUS_MONGODB_HOSTS

显示更多

字符串列表

127.0.0.1:27017

配置数据库名称。

环境变量:QUARKUS_MONGODB_DATABASE

显示更多

字符串

配置应用程序名称。

环境变量:QUARKUS_MONGODB_APPLICATION_NAME

显示更多

字符串

配置连接池中的最大连接数。

环境变量:QUARKUS_MONGODB_MAX_POOL_SIZE

显示更多

整数

配置连接池中的最小连接数。

环境变量:QUARKUS_MONGODB_MIN_POOL_SIZE

显示更多

整数

池化连接的最大空闲时间。超过此限制的连接将被关闭。

环境变量:QUARKUS_MONGODB_MAX_CONNECTION_IDLE_TIME

显示更多

Duration 

池化连接的最大生存时间。超过此限制的连接将被关闭。

环境变量:QUARKUS_MONGODB_MAX_CONNECTION_LIFE_TIME

显示更多

Duration 

配置维护作业运行之间的时间间隔。

环境变量:QUARKUS_MONGODB_MAINTENANCE_FREQUENCY

显示更多

Duration 

配置在连接池上运行第一个维护作业之前等待的时间。

环境变量:QUARKUS_MONGODB_MAINTENANCE_INITIAL_DELAY

显示更多

Duration 

连接打开之前可以花费的时间,否则将超时。

环境变量:QUARKUS_MONGODB_CONNECT_TIMEOUT

显示更多

Duration 

套接字读取之前可以花费的时间,否则将超时。

环境变量:QUARKUS_MONGODB_READ_TIMEOUT

显示更多

Duration 

是否使用 TLS 连接。

环境变量:QUARKUS_MONGODB_TLS

显示更多

布尔值

false

要使用的 TLS 配置的名称。

如果配置了名称,它将使用来自 quarkus.tls.<name>.* 的配置。如果配置了名称,但找不到具有该名称的 TLS 配置,则将引发错误。

默认情况下,使用默认 TLS 配置。

环境变量:QUARKUS_MONGODB_TLS_CONFIGURATION_NAME

显示更多

字符串

表示提供的地址是种子列表,驱动程序将尝试查找副本集的所有成员。

环境变量:QUARKUS_MONGODB_REPLICA_SET_NAME

显示更多

字符串

驱动程序将等待服务器选择成功的时间,然后抛出异常。

环境变量:QUARKUS_MONGODB_SERVER_SELECTION_TIMEOUT

显示更多

Duration 

在选择多个 MongoDB 服务器发送请求时,驱动程序仅将请求发送到 ping 时间小于或等于最快 ping 时间的服务器加上本地阈值。

环境变量:QUARKUS_MONGODB_LOCAL_THRESHOLD

显示更多

Duration 

驱动程序尝试确定集群中每台服务器当前状态的频率。

环境变量:QUARKUS_MONGODB_HEARTBEAT_FREQUENCY

显示更多

Duration 

配置读取关注度。支持的值为:local|majority|linearizable|snapshot|available

环境变量:QUARKUS_MONGODB_READ_CONCERN

显示更多

字符串

配置读取偏好。支持的值为:primary|primaryPreferred|secondary|secondaryPreferred|nearest

环境变量:QUARKUS_MONGODB_READ_PREFERENCE

显示更多

字符串

就绪健康检查期间使用的数据库

环境变量:QUARKUS_MONGODB_HEALTH_DATABASE

显示更多

字符串

admin

配置编码 java.util.UUID 实例和解码子类型为 3 的 BSON 二进制值时使用的 UUID 表示形式。

环境变量:QUARKUS_MONGODB_UUID_REPRESENTATION

显示更多

unspecifiedstandardc-sharp-legacyjava-legacypython-legacy

配置响应式传输。

环境变量:QUARKUS_MONGODB_REACTIVE_TRANSPORT

显示更多

netty使用基于 Netty 的传输,重用现有的 Netty 事件循环。mongo使用响应式驱动程序时,它使用由驱动程序管理的线程池支持的异步传输。

netty使用基于 Netty 的传输,重用现有的 Netty 事件循环。

此属性配置 DNS 服务器。如果未设置服务器,它会尝试读取 `/etc/resolv.conf` 中的第一个 nameserver(如果文件存在),否则回退到默认设置。

环境变量:QUARKUS_MONGODB_DNS_SERVER_HOST

显示更多

字符串

此属性配置 DNS 服务器端口。

环境变量:QUARKUS_MONGODB_DNS_SERVER_PORT

显示更多

整数

如果设置了 native.dns.use-vertx-dns-resolvertrue,此属性将配置 DNS 查询超时时长。

环境变量:QUARKUS_MONGODB_DNS_LOOKUP_TIMEOUT

显示更多

Duration 

5S

此属性启用 DNS 查询的日志记录。这对于理解查询失败的原因可能很有用。

环境变量:QUARKUS_MONGODB_DNS_LOG_ACTIVITY

显示更多

布尔值

false

配置连接字符串。格式为:mongodb://[username:password@]host1[:port1][,host2[:port2],…​[,hostN[:portN]]][/[database.collection][?options]]

mongodb:// 是标识连接字符串为标准格式所必需的前缀。

username:password@ 是可选的。如果提供了,驱动程序将在连接到数据库服务器后尝试登录到数据库。对于某些身份验证机制,只指定用户名而不指定密码,在这种情况下,用户名后的 ":" 也会被省略。

host1 是连接字符串的唯一必需部分。它标识要连接的服务器地址。

:portX 是可选的,如果未提供,则默认为 :27017。

/database 是要登录的数据库的名称,因此只有在使用 username:password@ 语法时才相关。如果未指定,则默认使用 admin 数据库。

?options 是连接选项。请注意,如果 database 缺失,在最后一个主机和引入选项的 ? 之间仍然需要一个 /。选项是 name=value 对,并且对之间用 "&" 分隔。

另一种格式是使用 mongodb+srv 协议

mongodb+srv://[username:password@]host[/[database][?options]]
  • mongodb+srv:// 是此格式必需的前缀。

  • username:password@ 是可选的。如果提供了,驱动程序将在连接到数据库服务器后尝试登录到数据库。对于某些身份验证机制,只指定用户名而不指定密码,在这种情况下,用户名后的 ":" 也会被省略

  • host 是 URI 的唯一必需部分。它标识一个主机名,该主机名在主名前加上 "_mongodb._tcp" 后从域名服务器查找 SRV 记录。每个 SRV 记录的主机/端口成为连接使用的种子列表,就像它们在 URI 中使用普通 mongodb 协议作为主机/端口对提供一样。

  • /database 是要登录的数据库的名称,因此只有在使用 username:password@ 语法时才相关。如果未指定,则默认使用 "admin" 数据库。

  • ?options 是连接选项。请注意,如果 database 缺失,在最后一个主机和引入选项的 ? 之间仍然需要一个 /。选项是 name=value 对,并且对之间用 "&" 分隔。此外,使用 mongodb+srv 协议,会从域名服务器查找给定主机的 TXT 记录,并且其中每个记录的文本值都会添加到 URI 本身的任何选项之前。因为任何选项的最后一个指定值都会生效,这意味着 URI 上提供的选项将覆盖通过 TXT 记录提供的任何选项。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CONNECTION_STRING

显示更多

字符串

配置 MongoDB 服务器地址(单个模式下为 1 个)。地址以 host:port 形式传递。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__HOSTS

显示更多

字符串列表

127.0.0.1:27017

配置数据库名称。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__DATABASE

显示更多

字符串

配置应用程序名称。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__APPLICATION_NAME

显示更多

字符串

配置连接池中的最大连接数。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__MAX_POOL_SIZE

显示更多

整数

配置连接池中的最小连接数。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__MIN_POOL_SIZE

显示更多

整数

池化连接的最大空闲时间。超过此限制的连接将被关闭。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__MAX_CONNECTION_IDLE_TIME

显示更多

Duration 

池化连接的最大生存时间。超过此限制的连接将被关闭。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__MAX_CONNECTION_LIFE_TIME

显示更多

Duration 

配置维护作业运行之间的时间间隔。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__MAINTENANCE_FREQUENCY

显示更多

Duration 

配置在连接池上运行第一个维护作业之前等待的时间。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__MAINTENANCE_INITIAL_DELAY

显示更多

Duration 

连接打开之前可以花费的时间,否则将超时。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CONNECT_TIMEOUT

显示更多

Duration 

套接字读取之前可以花费的时间,否则将超时。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__READ_TIMEOUT

显示更多

Duration 

是否使用 TLS 连接。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__TLS

显示更多

布尔值

false

要使用的 TLS 配置的名称。

如果配置了名称,它将使用来自 quarkus.tls.<name>.* 的配置。如果配置了名称,但找不到具有该名称的 TLS 配置,则将引发错误。

默认情况下,使用默认 TLS 配置。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__TLS_CONFIGURATION_NAME

显示更多

字符串

表示提供的地址是种子列表,驱动程序将尝试查找副本集的所有成员。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__REPLICA_SET_NAME

显示更多

字符串

驱动程序将等待服务器选择成功的时间,然后抛出异常。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__SERVER_SELECTION_TIMEOUT

显示更多

Duration 

在选择多个 MongoDB 服务器发送请求时,驱动程序仅将请求发送到 ping 时间小于或等于最快 ping 时间的服务器加上本地阈值。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__LOCAL_THRESHOLD

显示更多

Duration 

驱动程序尝试确定集群中每台服务器当前状态的频率。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__HEARTBEAT_FREQUENCY

显示更多

Duration 

配置读取关注度。支持的值为:local|majority|linearizable|snapshot|available

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__READ_CONCERN

显示更多

字符串

配置读取偏好。支持的值为:primary|primaryPreferred|secondary|secondaryPreferred|nearest

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__READ_PREFERENCE

显示更多

字符串

就绪健康检查期间使用的数据库

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__HEALTH_DATABASE

显示更多

字符串

admin

配置编码 java.util.UUID 实例和解码子类型为 3 的 BSON 二进制值时使用的 UUID 表示形式。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__UUID_REPRESENTATION

显示更多

unspecifiedstandardc-sharp-legacyjava-legacypython-legacy

配置响应式传输。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__REACTIVE_TRANSPORT

显示更多

netty使用基于 Netty 的传输,重用现有的 Netty 事件循环。mongo使用响应式驱动程序时,它使用由驱动程序管理的线程池支持的异步传输。

netty使用基于 Netty 的传输,重用现有的 Netty 事件循环。

开发服务

类型

默认

开发服务是否已被显式启用或禁用。通常默认启用开发服务,除非存在现有配置。

启用 DevServices 后,Quarkus 将尝试在开发或测试模式下运行时自动配置和启动数据库。

环境变量:QUARKUS_MONGODB_DEVSERVICES_ENABLED

显示更多

布尔值

用于基于容器的 DevServices 提供程序的容器镜像名称。

环境变量:QUARKUS_MONGODB_DEVSERVICES_IMAGE_NAME

显示更多

字符串

开发服务将侦听的可选固定端口。

如果未定义,将随机选择端口。

环境变量:QUARKUS_MONGODB_DEVSERVICES_PORT

显示更多

整数

添加到连接 URL 的通用属性。

环境变量:QUARKUS_MONGODB_DEVSERVICES_PROPERTIES__PROPERTY_KEY_

显示更多

Map<String,String>

传递给容器的环境变量。

环境变量:QUARKUS_MONGODB_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

显示更多

Map<String,String>

指示 Quarkus 开发服务管理的 MongoDB 服务器是否共享。当共享时,Quarkus 使用基于标签的服务发现来查找正在运行的容器。如果找到匹配的容器,则使用它,因此不会启动第二个容器。否则,开发服务将启动一个新的容器。

发现使用 quarkus-dev-service-mongodb 标签。该值使用 service-name 属性进行配置。

容器共享仅在开发模式下使用。

环境变量:QUARKUS_MONGODB_DEVSERVICES_SHARED

显示更多

布尔值

true

附加到已启动容器的 quarkus-dev-service-mongodb 标签的值。当 shared 设置为 true 时使用此属性。在这种情况下,在启动容器之前,MongoDB 的开发服务会查找带有 quarkus-dev-service-mongodb 标签设置为配置值的容器。如果找到,它将使用此容器而不是启动新容器。否则,它将使用指定值启动一个带有 quarkus-dev-service-mongodb 标签的新容器。

环境变量:QUARKUS_MONGODB_DEVSERVICES_SERVICE_NAME

显示更多

字符串

mongodb

写入关注度

类型

默认

配置安全性。如果设置为 true:驱动程序确保所有写入都已由 MongoDB 服务器确认,否则会抛出异常。(另请参阅 wwtimeoutMS)。如果设置为 false:驱动程序不确保所有写入都已由 MongoDB 服务器确认。

环境变量:QUARKUS_MONGODB_WRITE_CONCERN_SAFE

显示更多

布尔值

true

配置日志写入方面。如果设置为 true:驱动程序等待服务器将数据分组提交到磁盘上的日志文件。如果设置为 false:驱动程序不等待服务器将数据分组提交到磁盘上的日志文件。

环境变量:QUARKUS_MONGODB_WRITE_CONCERN_JOURNAL

显示更多

布尔值

true

设置后,驱动程序会将 w: wValue 添加到所有写入命令。它要求 safetrue。该值通常是一个数字,但也可以是 majority 字符串。

环境变量:QUARKUS_MONGODB_WRITE_CONCERN_W

显示更多

字符串

如果设置为 true,驱动程序将在写入操作因网络错误而失败时重试。

环境变量:QUARKUS_MONGODB_WRITE_CONCERN_RETRY_WRITES

显示更多

布尔值

false

设置后,驱动程序会将 wtimeout : ms 添加到所有写入命令。它要求 safetrue

环境变量:QUARKUS_MONGODB_WRITE_CONCERN_W_TIMEOUT

显示更多

Duration 

凭据和身份验证机制

类型

默认

配置用户名。

环境变量:QUARKUS_MONGODB_CREDENTIALS_USERNAME

显示更多

字符串

配置密码。

环境变量:QUARKUS_MONGODB_CREDENTIALS_PASSWORD

显示更多

字符串

如果提供了凭据,则配置要使用的身份验证机制。默认值为未指定,在这种情况下,客户端将根据服务器版本选择最安全的可用机制。对于 GSSAPI 和 MONGODB-X509 机制,不接受密码,只接受用户名。支持的值:null 或 GSSAPI|PLAIN|MONGODB-X509|SCRAM_SHA_1|SCRAM_SHA_256|MONGODB_AWS

环境变量:QUARKUS_MONGODB_CREDENTIALS_AUTH_MECHANISM

显示更多

字符串

配置身份验证凭据的来源。这通常是凭据创建所在的数据库。该值默认为连接字符串路径部分或“database”配置属性中指定的数据库。如果数据库未在任一位置指定,则默认值为 admin。此选项仅在使用 MONGO-CR 机制(默认)时有效。

环境变量:QUARKUS_MONGODB_CREDENTIALS_AUTH_SOURCE

显示更多

字符串

允许传递身份验证机制属性。

环境变量:QUARKUS_MONGODB_CREDENTIALS_AUTH_MECHANISM_PROPERTIES__PROPERTY_KEY_

显示更多

Map<String,String>

凭据提供程序名称

环境变量:QUARKUS_MONGODB_CREDENTIALS_CREDENTIALS_PROVIDER

显示更多

字符串

凭据提供程序 bean 名称。

这是实现 CredentialsProvider 的 bean 的 bean 名称(如 @Named 中)。当存在多个凭据提供程序时,它用于选择凭据提供程序 bean。当只有一个凭据提供程序可用时,这是不必要的。

对于 Vault,凭据提供程序 bean 名称为 vault-credentials-provider

环境变量:QUARKUS_MONGODB_CREDENTIALS_CREDENTIALS_PROVIDER_NAME

显示更多

字符串

写入关注度

类型

默认

配置安全性。如果设置为 true:驱动程序确保所有写入都已由 MongoDB 服务器确认,否则会抛出异常。(另请参阅 wwtimeoutMS)。如果设置为 false:驱动程序不确保所有写入都已由 MongoDB 服务器确认。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__WRITE_CONCERN_SAFE

显示更多

布尔值

true

配置日志写入方面。如果设置为 true:驱动程序等待服务器将数据分组提交到磁盘上的日志文件。如果设置为 false:驱动程序不等待服务器将数据分组提交到磁盘上的日志文件。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__WRITE_CONCERN_JOURNAL

显示更多

布尔值

true

设置后,驱动程序会将 w: wValue 添加到所有写入命令。它要求 safetrue。该值通常是一个数字,但也可以是 majority 字符串。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__WRITE_CONCERN_W

显示更多

字符串

如果设置为 true,驱动程序将在写入操作因网络错误而失败时重试。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__WRITE_CONCERN_RETRY_WRITES

显示更多

布尔值

false

设置后,驱动程序会将 wtimeout : ms 添加到所有写入命令。它要求 safetrue

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__WRITE_CONCERN_W_TIMEOUT

显示更多

Duration 

凭据和身份验证机制

类型

默认

配置用户名。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_USERNAME

显示更多

字符串

配置密码。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_PASSWORD

显示更多

字符串

如果提供了凭据,则配置要使用的身份验证机制。默认值为未指定,在这种情况下,客户端将根据服务器版本选择最安全的可用机制。对于 GSSAPI 和 MONGODB-X509 机制,不接受密码,只接受用户名。支持的值:null 或 GSSAPI|PLAIN|MONGODB-X509|SCRAM_SHA_1|SCRAM_SHA_256|MONGODB_AWS

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_AUTH_MECHANISM

显示更多

字符串

配置身份验证凭据的来源。这通常是凭据创建所在的数据库。该值默认为连接字符串路径部分或“database”配置属性中指定的数据库。如果数据库未在任一位置指定,则默认值为 admin。此选项仅在使用 MONGO-CR 机制(默认)时有效。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_AUTH_SOURCE

显示更多

字符串

允许传递身份验证机制属性。

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_AUTH_MECHANISM_PROPERTIES__PROPERTY_KEY_

显示更多

Map<String,String>

凭据提供程序名称

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_CREDENTIALS_PROVIDER

显示更多

字符串

凭据提供程序 bean 名称。

这是实现 CredentialsProvider 的 bean 的 bean 名称(如 @Named 中)。当存在多个凭据提供程序时,它用于选择凭据提供程序 bean。当只有一个凭据提供程序可用时,这是不必要的。

对于 Vault,凭据提供程序 bean 名称为 vault-credentials-provider

环境变量:QUARKUS_MONGODB__MONGO_CLIENT_CONFIGS__CREDENTIALS_CREDENTIALS_PROVIDER_NAME

显示更多

字符串

关于 Duration 格式

要编写时长值,请使用标准的 java.time.Duration 格式。有关更多信息,请参阅 Duration#parse() Java API 文档

您还可以使用简化的格式,以数字开头

  • 如果该值仅为一个数字,则表示以秒为单位的时间。

  • 如果该值是一个数字后跟 ms,则表示以毫秒为单位的时间。

在其他情况下,简化格式将被转换为 java.time.Duration 格式以进行解析

  • 如果该值是一个数字后跟 hms,则在其前面加上 PT

  • 如果该值是一个数字后跟 d,则在其前面加上 P

相关内容