对于最新的稳定版本,请使用 Spring Data MongoDB 4.5.2! |
配置
您可以使用以下配置创建和注册MongoTemplate
,如以下示例所示:
MongoClient
对象并启用 Spring 的异常转换支持-
Imperative
-
Reactive
-
XML
@Configuration
class ApplicationConfiguration {
@Bean
MongoClient mongoClient() {
return MongoClients.create("mongodb://localhost:27017");
}
@Bean
MongoOperations mongoTemplate(MongoClient mongoClient) {
return new MongoTemplate(mongoClient, "geospatial");
}
}
@Configuration
class ReactiveApplicationConfiguration {
@Bean
MongoClient mongoClient() {
return MongoClients.create("mongodb://localhost:27017");
}
@Bean
ReactiveMongoOperations mongoTemplate(MongoClient mongoClient) {
return new ReactiveMongoTemplate(mongoClient, "geospatial");
}
}
<mongo:mongo-client host="localhost" port="27017" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoClient" />
<constructor-arg name="databaseName" value="geospatial" />
</bean>
有几个重载的构造函数MongoTemplate
和ReactiveMongoTemplate
:
-
MongoTemplate(MongoClient mongo, String databaseName)
:采用MongoClient
对象和要作的默认数据库名称。 -
MongoTemplate(MongoDatabaseFactory mongoDbFactory)
:获取封装MongoClient
对象、数据库名称以及用户名和密码。 -
MongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter)
:添加一个MongoConverter
用于映射。
创建MongoTemplate
/ ReactiveMongoTemplate
是默认值WriteResultCheckingPolicy
,WriteConcern
,ReadPreference
以及下面列出的其他。
默认读取首选项
如果未通过查询定义其他首选项,则应用于读取作的默认读取首选项。
WriteResultChecking 策略
在开发过程中,如果com.mongodb.WriteResult
从任何MongoDB作返回的都包含错误。在开发过程中忘记执行此作是很常见的,然后最终得到一个看起来成功运行的应用程序,而实际上数据库没有按照您的期望进行修改。您可以将WriteResultChecking
属性MongoTemplate
设置为以下值之一:EXCEPTION
或NONE
,以抛出Exception
或什么都不做。默认情况下,使用WriteResultChecking
值NONE
.
默认 WriteConcern
如果尚未通过更高级别的驱动程序指定(例如com.mongodb.client.MongoClient
),您可以将com.mongodb.WriteConcern
属性,即MongoTemplate
用于写入作。如果WriteConcern
属性未设置,则默认为 MongoDB 驱动程序的 DB 或 Collection 设置中设置的属性。
写入问题解析器
对于要设置不同WriteConcern
基于每个作的值(对于删除、更新、插入和保存作),一个名为WriteConcernResolver
可以配置在MongoTemplate
.因为MongoTemplate
用于持久化 POJO,则WriteConcernResolver
允许您创建一个策略,该策略可以将特定的 POJO 类映射到WriteConcern
价值。以下列表显示了WriteConcernResolver
接口:
public interface WriteConcernResolver {
WriteConcern resolve(MongoAction action);
}
您可以使用MongoAction
参数来确定WriteConcern
值或使用模板本身的值作为默认值。MongoAction
包含要写入的集合名称,java.lang.Class
POJO 的 POJO,皈依的Document
,作 (REMOVE
,UPDATE
,INSERT
,INSERT_LIST
或SAVE
)和其他一些上下文信息。
以下示例显示了两组不同的类WriteConcern
设置:
public class MyAppWriteConcernResolver implements WriteConcernResolver {
@Override
public WriteConcern resolve(MongoAction action) {
if (action.getEntityType().getSimpleName().contains("Audit")) {
return WriteConcern.ACKNOWLEDGED;
} else if (action.getEntityType().getSimpleName().contains("Metadata")) {
return WriteConcern.JOURNALED;
}
return action.getDefaultWriteConcern();
}
}
发布实体生命周期事件
模板发布生命周期事件。 如果没有监听器,则可以禁用此功能。
@Bean
MongoOperations mongoTemplate(MongoClient mongoClient) {
MongoTemplate template = new MongoTemplate(mongoClient, "geospatial");
template.setEntityLifecycleEventsEnabled(false);
// ...
}
配置 EntityCallbacks
嵌套到生命周期事件,模板调用 EntityCallbacks,可以通过模板 API 设置(如果未自动配置)。
-
Imperative
-
Reactive
@Bean
MongoOperations mongoTemplate(MongoClient mongoClient) {
MongoTemplate template = new MongoTemplate(mongoClient, "...");
template.setEntityCallbacks(EntityCallbacks.create(...));
// ...
}
@Bean
ReactiveMongoOperations mongoTemplate(MongoClient mongoClient) {
ReactiveMongoTemplate template = new ReactiveMongoTemplate(mongoClient, "...");
template.setEntityCallbacks(ReactiveEntityCallbacks.create(...));
// ...
}