使用 MongoDB 客户端
MongoDB 是一个广为人知的 NoSQL 数据库,使用非常广泛。
在本指南中,我们将介绍如何让您的 REST 服务使用 MongoDB 数据库。
先决条件
要完成本指南,您需要
-
大约 15 分钟
-
一个 IDE
-
已安装 JDK 17+ 并正确配置了
JAVA_HOME -
Apache Maven 3.9.9
-
如果您想使用它,可以选择 Quarkus CLI
-
如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置
-
已安装 MongoDB 或已安装 Docker
解决方案
我们建议您按照以下章节中的说明,逐步创建应用程序。但是,您可以直接转到完整的示例。
克隆 Git 存储库:git clone https://github.com/quarkusio/quarkus-quickstarts.git,或者下载一个存档。
解决方案位于 mongodb-quickstart 目录中。
创建 Maven 项目
首先,我们需要一个新项目。使用以下命令创建一个新项目
对于 Windows 用户
-
如果使用 cmd,(不要使用反斜杠
\并将所有内容放在同一行上) -
如果使用 Powershell,请将
-D参数用双引号括起来,例如"-DprojectArtifactId=mongodb-quickstart"
此命令生成一个 Maven 结构,导入 Quarkus REST(以前称为 RESTEasy Reactive)、Jackson 和 MongoDB 客户端扩展。之后,quarkus-mongodb-client 扩展已添加到您的构建文件中。
如果您已配置 Quarkus 项目,则可以通过在项目根目录中运行以下命令将 mongodb-client 扩展添加到您的项目中
quarkus extension add mongodb-client
./mvnw quarkus:add-extension -Dextensions='mongodb-client'
./gradlew addExtension --extensions='mongodb-client'
这会将以下内容添加到您的 pom.xml 中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mongodb-client</artifactId>
</dependency>
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
请注意,键中有一个额外的部分(users 和 inventory 段)。语法如下:quarkus.mongodb.[可选名称.][mongo 连接属性]。如果省略了名称,则配置默认客户端。
|
多个 MongoDB 客户端的使用通过允许连接到多个 MongoDB 集群来实现 MongoDB 的多租户。 |
运行 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
CLIquarkus devMaven./mvnw quarkus:devGradle./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 类进行映射。
以下是使用 MongoCollection 和 FruitCodec 的示例。
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-micrometer 或 quarkus-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 启动时要监听的所需端口,应使用以下代码
要设置要启动的所需 MongoDB 版本,应使用以下代码
使用的字符串值可以是 |
旧版客户端
我们默认不包含旧版 MongoDB 客户端。它包含已退休的 MongoDB Java API (DB, DBCollection, …) 和已被 com.mongodb.client.MongoClient 取代的 com.mongodb.MongoClient。
如果您想使用旧版 API,需要将以下依赖项添加到您的构建文件中
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-legacy</artifactId>
</dependency>
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 客户端。
您可以使用常用命令构建本机可执行文件
quarkus build --native
./mvnw install -Dnative
./gradlew build -Dquarkus.native.enabled=true
运行它就像执行 ./target/mongodb-quickstart-1.0.0-SNAPSHOT-runner 一样简单。
然后,您可以将您的浏览器指向 https://:8080/fruits.html 并使用您的应用程序。
|
目前,Quarkus 在原生模式下不支持 客户端字段级加密。 |
|
如果在原生模式下运行应用程序时遇到以下错误 |
以编程方式自定义 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 扩展存在,是否发布健康检查。 环境变量: 显示更多 |
布尔值 |
|
布尔值 |
|
|
如果设置为 true,即使没有使用它们的注入点,也将始终创建默认客户端 环境变量: 显示更多 |
布尔值 |
|
如果存在 quarkus-opentelemetry 扩展,驱动程序命令的追踪跨度是否被发送。 环境变量: 显示更多 |
布尔值 |
|
配置连接字符串。格式为:
另一种格式是使用
环境变量: 显示更多 |
字符串 |
|
配置 MongoDB 服务器地址(单个模式下为 1 个)。地址以 环境变量: 显示更多 |
字符串列表 |
|
字符串 |
||
字符串 |
||
整数 |
||
整数 |
||
池化连接的最大空闲时间。超过此限制的连接将被关闭。 环境变量: 显示更多 |
||
池化连接的最大生存时间。超过此限制的连接将被关闭。 环境变量: 显示更多 |
||
配置维护作业运行之间的时间间隔。 环境变量: 显示更多 |
||
配置在连接池上运行第一个维护作业之前等待的时间。 环境变量: 显示更多 |
||
布尔值 |
|
|
要使用的 TLS 配置的名称。 如果配置了名称,它将使用来自 默认情况下,不使用默认 TLS 配置。 环境变量: 显示更多 |
字符串 |
|
表示提供的地址是种子列表,驱动程序将尝试查找副本集的所有成员。 环境变量: 显示更多 |
字符串 |
|
驱动程序将等待服务器选择成功的时间,然后抛出异常。 环境变量: 显示更多 |
||
在选择多个 MongoDB 服务器发送请求时,驱动程序仅将请求发送到 ping 时间小于或等于最快 ping 时间的服务器加上本地阈值。 环境变量: 显示更多 |
||
驱动程序尝试确定集群中每台服务器当前状态的频率。 环境变量: 显示更多 |
||
配置读取关注度。支持的值为: 环境变量: 显示更多 |
字符串 |
|
配置读取偏好。支持的值为: 环境变量: 显示更多 |
字符串 |
|
字符串 |
|
|
配置编码 环境变量: 显示更多 |
|
|
|
|
|
此属性配置 DNS 服务器。如果未设置服务器,它会尝试读取 `/etc/resolv.conf` 中的第一个 环境变量: 显示更多 |
字符串 |
|
整数 |
||
如果设置了 环境变量: 显示更多 |
|
|
此属性启用 DNS 查询的日志记录。这对于理解查询失败的原因可能很有用。 环境变量: 显示更多 |
布尔值 |
|
配置连接字符串。格式为:
另一种格式是使用
环境变量: 显示更多 |
字符串 |
|
配置 MongoDB 服务器地址(单个模式下为 1 个)。地址以 环境变量: 显示更多 |
字符串列表 |
|
配置数据库名称。 环境变量: 显示更多 |
字符串 |
|
配置应用程序名称。 环境变量: 显示更多 |
字符串 |
|
配置连接池中的最大连接数。 环境变量: 显示更多 |
整数 |
|
配置连接池中的最小连接数。 环境变量: 显示更多 |
整数 |
|
池化连接的最大空闲时间。超过此限制的连接将被关闭。 环境变量: 显示更多 |
||
池化连接的最大生存时间。超过此限制的连接将被关闭。 环境变量: 显示更多 |
||
配置维护作业运行之间的时间间隔。 环境变量: 显示更多 |
||
配置在连接池上运行第一个维护作业之前等待的时间。 环境变量: 显示更多 |
||
连接打开之前可以花费的时间,否则将超时。 环境变量: 显示更多 |
||
套接字读取之前可以花费的时间,否则将超时。 环境变量: 显示更多 |
||
是否使用 TLS 连接。 环境变量: 显示更多 |
布尔值 |
|
要使用的 TLS 配置的名称。 如果配置了名称,它将使用来自 默认情况下,不使用默认 TLS 配置。 环境变量: 显示更多 |
字符串 |
|
表示提供的地址是种子列表,驱动程序将尝试查找副本集的所有成员。 环境变量: 显示更多 |
字符串 |
|
驱动程序将等待服务器选择成功的时间,然后抛出异常。 环境变量: 显示更多 |
||
在选择多个 MongoDB 服务器发送请求时,驱动程序仅将请求发送到 ping 时间小于或等于最快 ping 时间的服务器加上本地阈值。 环境变量: 显示更多 |
||
驱动程序尝试确定集群中每台服务器当前状态的频率。 环境变量: 显示更多 |
||
配置读取关注度。支持的值为: 环境变量: 显示更多 |
字符串 |
|
配置读取偏好。支持的值为: 环境变量: 显示更多 |
字符串 |
|
就绪健康检查期间使用的数据库 环境变量: 显示更多 |
字符串 |
|
配置编码 环境变量: 显示更多 |
|
|
配置响应式传输。 环境变量: 显示更多 |
|
|
类型 |
默认 |
|
开发服务是否已被显式启用或禁用。通常默认启用开发服务,除非存在现有配置。 启用 DevServices 后,Quarkus 将尝试在开发或测试模式下运行时自动配置和启动数据库。 环境变量: 显示更多 |
布尔值 |
|
用于基于容器的 DevServices 提供程序的容器镜像名称。 环境变量: 显示更多 |
字符串 |
|
开发服务将侦听的可选固定端口。 如果未定义,将随机选择端口。 环境变量: 显示更多 |
整数 |
|
添加到连接 URL 的通用属性。 环境变量: 显示更多 |
Map<String,String> |
|
传递给容器的环境变量。 环境变量: 显示更多 |
Map<String,String> |
|
指示 Quarkus 开发服务管理的 MongoDB 服务器是否共享。当共享时,Quarkus 使用基于标签的服务发现来查找正在运行的容器。如果找到匹配的容器,则使用它,因此不会启动第二个容器。否则,开发服务将启动一个新的容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
附加到已启动容器的 环境变量: 显示更多 |
字符串 |
|
类型 |
默认 |
|
配置安全性。如果设置为 环境变量: 显示更多 |
布尔值 |
|
配置日志写入方面。如果设置为 环境变量: 显示更多 |
布尔值 |
|
设置后,驱动程序会将 环境变量: 显示更多 |
字符串 |
|
如果设置为 环境变量: 显示更多 |
布尔值 |
|
设置后,驱动程序会将 环境变量: 显示更多 |
||
类型 |
默认 |
|
字符串 |
||
字符串 |
||
如果提供了凭据,则配置要使用的身份验证机制。默认值为未指定,在这种情况下,客户端将根据服务器版本选择最安全的可用机制。对于 GSSAPI 和 MONGODB-X509 机制,不接受密码,只接受用户名。支持的值:null 或 环境变量: 显示更多 |
字符串 |
|
配置身份验证凭据的来源。这通常是凭据创建所在的数据库。该值默认为连接字符串路径部分或“database”配置属性中指定的数据库。如果数据库未在任一位置指定,则默认值为 环境变量: 显示更多 |
字符串 |
|
允许传递身份验证机制属性。 环境变量: 显示更多 |
Map<String,String> |
|
凭据提供程序名称 环境变量: 显示更多 |
字符串 |
|
凭据提供程序 bean 名称。 这是实现 对于 Vault,凭据提供程序 bean 名称为 环境变量: 显示更多 |
字符串 |
|
类型 |
默认 |
|
配置安全性。如果设置为 环境变量: 显示更多 |
布尔值 |
|
配置日志写入方面。如果设置为 环境变量: 显示更多 |
布尔值 |
|
设置后,驱动程序会将 环境变量: 显示更多 |
字符串 |
|
如果设置为 环境变量: 显示更多 |
布尔值 |
|
设置后,驱动程序会将 环境变量: 显示更多 |
||
类型 |
默认 |
|
配置用户名。 环境变量: 显示更多 |
字符串 |
|
配置密码。 环境变量: 显示更多 |
字符串 |
|
如果提供了凭据,则配置要使用的身份验证机制。默认值为未指定,在这种情况下,客户端将根据服务器版本选择最安全的可用机制。对于 GSSAPI 和 MONGODB-X509 机制,不接受密码,只接受用户名。支持的值:null 或 环境变量: 显示更多 |
字符串 |
|
配置身份验证凭据的来源。这通常是凭据创建所在的数据库。该值默认为连接字符串路径部分或“database”配置属性中指定的数据库。如果数据库未在任一位置指定,则默认值为 环境变量: 显示更多 |
字符串 |
|
允许传递身份验证机制属性。 环境变量: 显示更多 |
Map<String,String> |
|
凭据提供程序名称 环境变量: 显示更多 |
字符串 |
|
凭据提供程序 bean 名称。 这是实现 对于 Vault,凭据提供程序 bean 名称为 环境变量: 显示更多 |
字符串 |
|
关于 Duration 格式
要编写时长值,请使用标准的 您还可以使用简化的格式,以数字开头
在其他情况下,简化格式将被转换为
|