# 트랜잭션 패키지의 타입 수: 20 MongoTransactionExecutor.java MongoTransactionProfile.java MongoTransactionScope.java MongoTransactionSession.java MongoTransactionSessionFactory.java ReactiveMongoTransactionExecutor.java ReactiveMongoTransactionSession.java ReactiveMongoTransactionSessionFactory.java SpringMongoTransactionExecutor.java SpringMongoTransactionSessionFactory.java SpringReactiveMongoTransactionExecutor.java SpringReactiveMongoTransactionSessionFactory.java MongoCommitReconciler.java MongoRetryBudget.java MongoRetryDecision.java MongoTransactionRetryCoordinator.java MongoCausalSessionContext.java MongoCausalSessionExecutor.java ReactiveMongoCausalSessionExecutor.java SpringMongoCausalSessionExecutor.java # 자동설정이 그 타입들을 참조하는 매치 (Transaction / CausalSession): 0 / 0 # transaction 패키지 밖 main 참조: 0 # 플래그는 선언되고 검증기까지 가서 판정에 쓰인다 29: boolean transactions, 362: properties.transactions(), 97: if (transactionsEnabled && !capabilities.isStable(MongoCapability.TRANSACTION)) { 98- throw MongoOperationRejectedException.of( 99- "startup.capability", 100- "transactions are enabled but unavailable here: " # 다만 그 검사는 프로브가 있어야 돌고, 이 저장소는 프로브를 출하하지 않는다 @Bean @ConditionalOnBean(MongoTopologyProbe.class) public InitializingBean mongoPlatformStartupCheck( * as a state that must start. This repository ships no probe: it is built from the live * data-plane client by the composition root that owns the connection, which is a fork's decision. # MongoTopologyProbe 를 빈으로 만드는 main 코드: 0 # 같은 생성자가 입력마다 다르게 처리한다 profiles = profiles == null ? Map.of() : Map.copyOf(profiles); changeStreams = false; if (requiredSecondaries < 0) { throw MongoOperationRejectedException.of( "config.secondaries", "the required secondary count must not be negative; " + requiredSecondaries + " is"); # 반대쪽 실행체는 플래그와 무관하게 조립된다 @ConditionalOnClass(org.springframework.data.mongodb.core.ReactiveMongoTemplate.class) @ConditionalOnBean(org.springframework.data.mongodb.core.ReactiveMongoTemplate.class) public static class ReactiveExecution { @Bean @ConditionalOnMissingBean public dev.caskeleton.adapter.outbound.mongo.changestream.consumer.MongoChangeStreamSource # 이 경로에서 두 플래그를 보는 조건: 0 # 그 주석이 없다고 적은 드라이버 호출 46: .changeStream(org.bson.Document.class) 47: .watchCollection(collections.require(subscription.collectionProfile())) 64: options.startAfter(from.token()); 66: options.resumeAfter(from.token()); # 그 위 소비자가 요구하는 다섯 포트 dev.caskeleton.adapter.outbound.mongo.changestream.MongoChangeStreamSubscription.class, dev.caskeleton.adapter.outbound.mongo.changestream.MongoResumeCheckpointStore.class, dev.caskeleton.adapter.outbound.mongo.changestream.MongoResumeTokenCodec.class, dev.caskeleton.adapter.outbound.mongo.changestream.projector.MongoChangeProjector.class, dev.caskeleton.adapter.outbound.mongo.changestream.projector.MongoChangeDeduplicationStore .class