spring-data-mongodb是如何给collection创建索引的?
从spring-boot-autoconfigure开始
堆栈如下:
大致的逻辑梳理一下:系统启动的时候,spring-boot-autoconfigure根据spring.factories找那个配置的MongoDataAutoConfiguration去加载mongodb相关的配置,MongoDataAutoConfiguration这个类又会继续加载MongoDataConfiguration和MongoDbFactoryDependentConfiguration。MongoDataConfiguration在构建MongoMappingContext的时候回去扫描系统中所有的@Document和@Persistent,这就找到了所有的domain对象,MongoDbFactoryDependentConfiguration在构建mongoTemplate的时候,会遍历MongoMappingContext中的domain对象,然后查找对象是否需要创建索引并创建。如果创建索引的过程中出现DataIntegrityViolationException数据完整性约束的异常,直接忽略,因为有可能被另一个应用先创建出来了。