Spring

'MongoMappingContext#setAutoIndexCreation(boolean)'을 사용하거나 'MongoConfigurationSupport#autoIndexCreation()'을 명시적으로 재정의하세요. 물어보다

기록만이살길 2022. 11. 3. 12:44
반응형

'MongoMappingContext#setAutoIndexCreation(boolean)'을 사용하거나 'MongoConfigurationSupport#autoIndexCreation()'을 명시적으로 재정의하세요. 물어보다

1. 질문(문제점):

https://docs.spring.io/spring-data/mongodb/docs/2.2.0.RC1/reference/html/#mapping-usage 및 기타 웹 소스를 살펴 보았지만 솔루션이 작동하지 않았습니다. .

저는 Spring Boot 2.2.2.RELEASE와 Spring Data Mongo를 사용하고 있습니다. 이 예에서는 Model/Pojo 필드 수준에서 사용하고 있습니다.

@Indexed(name = AppConstants.FIRSTNAME_INDEX, direction = IndexDirection.ASCENDING)
private String firstName;

오류:

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);
> }
> -----------------------------------------------------------------------------------------

로그에서 제안한 대로 구현했지만 setAutoIndexCreation 메서드가 표시되지 않습니다.

public class MongoConfig extends AbstractMongoClientConfiguration {

    @Override
    public MongoClient mongoClient() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected String getDatabaseName() {
        // TODO Auto-generated method stub
        return null;
    }
}

2. 해결방안:

Juan Ibarra 어노테이션 외에도 이것을 application.yml 파일에 추가하면 저에게 효과가 없었습니다.

spring:
  data:
    mongodb:
      auto-index-creation: false

그러나 AbstractMongoClientConfiguration에서 autoIndexCreation() 재정의가 작동했습니다.

@Override
protected boolean autoIndexCreation() {
    return false;
}
60003179
반응형