Contexte d'exécution & Résolveur

Explique comment le MongoTemplateResolver sélectionne le MongoExecutionContext par clé et comment le DriverMongoExecutionContext fournit les limites de base de données, de session et de mapping.


Contrat de MongoTemplateResolver

MongoTemplateResolver.java
java
public interface MongoTemplateResolver<K> {
  MongoExecutionContext getTemplate(K key);
}

ReactiveMongoDsl<K>는 key마다 MongoExecutionContext를 가져옵니다. MongoExecutionContext가 MongoDatabase, ClientSession, collection naming, entity ↔ Document mapping과 save lifecycle hook의 경계를 담당합니다.

DriverMongoExecutionContext

java
MongoClient frontClient = MongoClients.create(frontConnectionString);
MongoClient backClient = MongoClients.create(backConnectionString);

MongoExecutionContext frontContext = new DriverMongoExecutionContext(
    frontClient,
    frontClient.getDatabase("front")
);

MongoExecutionContext backContext = new DriverMongoExecutionContext(
    backClient,
    backClient.getDatabase("back")
);

MongoTemplateResolver<MongoTemplateName> resolver = key ->
    key == MongoTemplateName.BACK ? backContext : frontContext;

기본 collection 이름은 entity simple class name을 decapitalize해서 결정합니다. 프로젝트의 실제 naming 규칙이 다르면 생성자에 collection-name resolver를 전달합니다.

Nommage de collection

java
MongoExecutionContext context = new DriverMongoExecutionContext(
    mongoClient,
    mongoDatabase,
    entityClass -> collectionNameResolver(entityClass)
);

Si le nom de la collection est complètement fixe pendant la durée de vie de l'application, vous pouvez utiliser DriverMongoExecutionContext.cachedCollectionNameResolver(...). Pour les résolveurs dont le nom change selon le tenant/request/time, n'utilisez pas d'aide de cache.

Portée de session et transaction

Le ClientSession créé dans getTxJob(...) est propagé uniquement à la même exécution DSL par MongoExecutionContext#getSessionScope(). DriverMongoExecutionContext utilise par défaut son propre MongoClient comme portée de session.

Lors de l'utilisation de Spring Data MongoDB

© 2026 Byeolnaerim. Tous droits réservés.PrésentationPolitique de confidentialité