禁用自动索引创建但保留 @Indexed 注释的效果
Effect of disabling auto-index-creation but retaining @Indexed annotations
根据 https://github.com/spring-projects/spring-data-mongodb/issues/3049 在 Spring 数据 MongoDb 中自动创建索引现已弃用并默认禁用。但是,我们希望在代码中保留 @Indexed
注释,仅用于文档目的。
如果我们要跳过从 @Document
注释的 类 中删除所有 @Indexed
和 @CompoundIndexes
注释(即只留下它们),同时允许默认值禁用自动索引创建行为(或显式设置 spring.data.mongodb.auto-index-creation = false
)这是否与完全从代码中删除所有 @Indexed
和 @CompoundIndexes
注释具有相同的效果?
我担心在代码中保留这些注释可能会继续产生副作用 and/or 导致与自动索引创建无关的错误。或者这些注释专门用于支持自动索引创建?
以下适用于Spring引导2.5.2
和Spring数据Mongo3.2.2
.
TL;DR;
如果设置了 spring.data.mongodb.auto-index-creation=false
,则不会自动创建任何索引,并且像 @Indexed
这样的注释不会对您的 mongo 集合产生影响。另一方面,它们仍然允许在运行时以编程方式使用 MongoPersistentEntityIndexResolver
从实体收集这些索引信息。
详细演练
设置时spring.data.mongodb.auto-index-creation=false
- 该设置将从
MongoProperties
通过 MongoDataConfiguration
传播到 MongoMappingContext
bean,在那里它作为 MongoMappingContext#isAutoIndexCreation
可用
- 然后在
MongoTemplate
(和 ReactiveMongoTemplate
)的构造函数中对其进行评估,以确定新创建的 (Reactive)MongoTemplate
是否应该分配 MongoPersistentEntityIndexCreator
的实例,或者不是
- 如果在
MongoTemplate
的构造过程中创建了 MongoPersistentEntityIndexCreator
的实例,索引创建逻辑将启动 MongoPersistentEntityIndexCreator
[=54= 的对象创建(构造函数) ]
参考资料
org.springframework.boot.autoconfigure.mongo.MongoProperties#isAutoIndexCreation
org.springframework.boot.autoconfigure.data.mongo.MongoDataConfiguration#mongoMappingContext
org.springframework.data.mongodb.core.mapping.MongoMappingContext#isAutoIndexCreation
org.springframework.data.mongodb.core.MongoTemplate#MongoTemplate
org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator#MongoPersistentEntityIndexCreator
根据 https://github.com/spring-projects/spring-data-mongodb/issues/3049 在 Spring 数据 MongoDb 中自动创建索引现已弃用并默认禁用。但是,我们希望在代码中保留 @Indexed
注释,仅用于文档目的。
如果我们要跳过从 @Document
注释的 类 中删除所有 @Indexed
和 @CompoundIndexes
注释(即只留下它们),同时允许默认值禁用自动索引创建行为(或显式设置 spring.data.mongodb.auto-index-creation = false
)这是否与完全从代码中删除所有 @Indexed
和 @CompoundIndexes
注释具有相同的效果?
我担心在代码中保留这些注释可能会继续产生副作用 and/or 导致与自动索引创建无关的错误。或者这些注释专门用于支持自动索引创建?
以下适用于Spring引导2.5.2
和Spring数据Mongo3.2.2
.
TL;DR;
如果设置了 spring.data.mongodb.auto-index-creation=false
,则不会自动创建任何索引,并且像 @Indexed
这样的注释不会对您的 mongo 集合产生影响。另一方面,它们仍然允许在运行时以编程方式使用 MongoPersistentEntityIndexResolver
从实体收集这些索引信息。
详细演练
设置时spring.data.mongodb.auto-index-creation=false
- 该设置将从
MongoProperties
通过MongoDataConfiguration
传播到MongoMappingContext
bean,在那里它作为MongoMappingContext#isAutoIndexCreation
可用
- 然后在
MongoTemplate
(和ReactiveMongoTemplate
)的构造函数中对其进行评估,以确定新创建的(Reactive)MongoTemplate
是否应该分配MongoPersistentEntityIndexCreator
的实例,或者不是 - 如果在
MongoTemplate
的构造过程中创建了MongoPersistentEntityIndexCreator
的实例,索引创建逻辑将启动MongoPersistentEntityIndexCreator
[=54= 的对象创建(构造函数) ]
参考资料
org.springframework.boot.autoconfigure.mongo.MongoProperties#isAutoIndexCreation
org.springframework.boot.autoconfigure.data.mongo.MongoDataConfiguration#mongoMappingContext
org.springframework.data.mongodb.core.mapping.MongoMappingContext#isAutoIndexCreation
org.springframework.data.mongodb.core.MongoTemplate#MongoTemplate
org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator#MongoPersistentEntityIndexCreator