您可以使用以下配置创建和注册 的实例,如以下示例所示:MongoTemplate
MongoClient
-
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)
:获取封装对象、数据库名称以及用户名和密码的 MongoDbFactory 对象。MongoClient
-
MongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter)
:添加用于映射的 a。MongoConverter
在创建 / 时可能要设置的其他可选属性是默认的 、 和下面列出的其他属性。MongoTemplate
ReactiveMongoTemplate
WriteResultCheckingPolicy
WriteConcern
ReadPreference
默认读取首选项
如果未通过查询定义其他首选项,则默认读取首选项应用于读取操作。
WriteResultChecking 策略
在开发过程中,如果从任何MongoDB操作返回的包含错误,则记录或抛出异常是很方便的。在开发过程中忘记这样做是很常见的,然后最终得到一个看起来运行成功的应用程序,而实际上,数据库没有按照您的期望进行修改。可以将 的属性设置为以下值之一:或 ,以分别抛出 或不执行任何操作。默认值是使用 。com.mongodb.WriteResult
WriteResultChecking
MongoTemplate
EXCEPTION
NONE
Exception
WriteResultChecking
NONE
默认 WriteConcern
如果尚未通过更高级别的驱动程序(如 )指定它,则可以设置用于写入操作的属性。如果未设置该属性,则默认为MongoDB驱动程序的“数据库”或“集合”设置中设置的属性。com.mongodb.client.MongoClient
com.mongodb.WriteConcern
MongoTemplate
WriteConcern
WriteConcernResolver
对于更高级的情况,您希望基于每个操作设置不同的值(用于删除、更新、插入和保存操作),可以在 上配置名为 的策略接口。由于用于持久化 POJO,因此允许您创建一个可以将特定 POJO 类映射到值的策略。以下列表显示了该接口:WriteConcern
WriteConcernResolver
MongoTemplate
MongoTemplate
WriteConcernResolver
WriteConcern
WriteConcernResolver
public interface WriteConcernResolver {
WriteConcern resolve(MongoAction action);
}
您可以使用参数来确定值,也可以使用模板本身的值作为默认值。 包含要写入的集合名称、POJO 的集合名称、转换后的 、操作 (、 、 、 或 )以及其他一些上下文信息。
下面的示例显示了两组获取不同设置的类:MongoAction
WriteConcern
MongoAction
java.lang.Class
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(...));
// ...
}