#spring-boot #project-reactor #spring-mongodb #mongodb-indexes
#весенняя загрузка #проект-реактор #spring-mongodb #mongodb-индексы
Вопрос:
У меня есть класс Java «Class A», объект которого сохраняется в MongoDB с использованием операции reactiveMongoTemplate.save реактивным способом.
public class A {
// field 1
// field 2
..
// field n
}
Это работало отлично и заполнило много данных в соответствующую коллекцию.
Теперь я решил ввести индексы в коллекцию и, следовательно, добавил эту аннотацию к классу
@CompoundIndex(name ="collection_index_name", def = "{'field1':1, 'field1':-1}", unique=true)
Теперь, после добавления этой аннотации, я вижу, что мой MongoDB writer (процесс, который записывает данные в вышеуказанную коллекцию mongodb) надолго зависает (15-20 минут) или больше ничего не обрабатывает.
При отладке я вижу, что элемент управления достигает точки, в которой у меня есть ReaciveMongoTemplate.save()
операция. Но после выполнения реактивного метода save я просто получаю приведенное ниже предупреждение, и никаких записей в коллекцию не происходит.
Automatic index creation will be disabled by default as of Spring Data MongoDB 3.x.
Please use 'MongoMappingContext#setAutoIndexCreation(boolean)' or override 'MongoConfigurationSupport#autoIndexCreation()' to be explicit.
However, we recommend setting up indices manually in an application ready block. You may use index derivation there as well.
> -----------------------------------------------------------------------------------------
> @EventListener(ApplicationReadyEvent.class)
> public void initIndicesAfterStartup() {
>
> IndexOperations indexOps = mongoTemplate.indexOps(DomainType.class);
>
> IndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext);
> resolver.resolveIndexFor(DomainType.class).forEach(indexOps::ensureIndex);
> }
> -----------------------------------------------------------------------------------------
Как только я удаляю вышеупомянутую аннотацию или заменяю новой пустой коллекцией и снова запускаю тот же код, я вижу, что записи немедленно сохраняются.
Есть ли какое-либо объяснение такому поведению? Имеет ли это какое-то отношение к добавлению индекса в коллекцию после того, как внутри коллекции уже было заполнено много данных?