使用 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 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
类进行映射。
以下是使用 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 格式
要编写时长值,请使用标准的 您还可以使用简化的格式,以数字开头
在其他情况下,简化格式将被转换为
|