[spring-projects/spring-boot]'spring.data.mongodb.auto-index-creation=true' 不起作用

2024-05-14 634 views
9

我已根据文档将以下行添加到我的 application.properties 中: spring.data.mongodb.auto-index-creation=true

但是,我的模型类中仍然没有创建用 @Document 注释的索引和用 @Indexed 注释的字段。

如果我通过以下方式覆盖 Java 中的 autoIndexCreation:

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {

    @Override
    protected boolean autoIndexCreation() {               
        return true;
    }
}

索引已创建。所以这个方法有效,但 application.properties 条目不起作用。

使用 Spring Boot 2.5.5

回答

3

您的应用程序中是否始终有一个AbstractMongoClientConfiguration子类,或者只是为了允许您覆盖而添加了子类autoIndexCreation()?如果它始终存在,则由MongoMappingContext其超类定义的 ,MongoConfigurationSupport将导致自动配置MongoMappingContext退出。由于此后退,spring.data.mongodb.auto-index-creation将不会产生任何影响,因为它应用于自动配置MongoMappingContext

https://github.com/spring-projects/spring-boot/blob/34677508a76d0decad4ba2ced46ccfcf6804fb4a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/ MongoDataConfiguration.java#L50

AbstractMongoClientConfiguration如果在您的应用程序中没有或子类的情况下出现问题,MongoConfigurationSupport那么我不确定原因可能是什么。如果是这种情况,并且您希望我们花更多时间进行调查,请花一些时间提供重现该问题的完整但最小的示例。您可以通过将其推送到 GitHub 上的单独存储库或将其压缩并附加到此问题来与我们共享。

1

我只是创建了 AbstractMongoClientConfiguration 来尝试覆盖。我一开始没有。稍后我会尝试是否可以提供样品。谢谢你们的快速响应。

5

如果您希望我们查看此问题,请提供所需的信息。如果在接下来的 7 天内未提供信息,此问题将被关闭。

0

由于缺乏所需的反馈而关闭。如果您希望我们查看此问题,请提供所需的信息,我们将重新打开该问题。

2

嗨,我不想打开一个新问题,但我遇到了同样的问题,并像开场白一样使用 Spring Boot 2.5.3 和 2.5.5 进行了测试。

如果我autoIndexCreation用 Java 覆盖,则会创建索引。

我的项目中总是有一个AbstractMongoClientConfiguration子类。如果我使用子类,是否需要重写该方法?

1

是的。请参阅我上面的评论,希望能解释为什么会出现这种情况。

1

Spring Boot 2.6.0 中的行为仍然相同。 spring.data.mongodb.auto-index-creation=true' 没有效果。我现在没有使用 AbstractMongoClientConfiguration,也没有配置任何其他内容。

1

@NicoHeller 没有进行任何更改,因此预计会有相同的行为。到目前为止,据我们所知,每个遇到此问题的人都定义了自己的问题,AbstractMongoClientConfiguration这导致自动配置停止。如果您在没有任何定义的情况下遇到问题AbstractMongoClientConfiguration,请提供重现该问题的最小示例,我们可以看一下。

4

@威尔金索纳

对不起。我只是忘记了“实体”上方的 @Document 注释,如果那里一切都可以使用 spring.data.mongodb.auto-index-creation=true 开箱即用

6

感谢您让我们知道。很高兴听到你一切顺利。

0

@Document更准确地说,对于其他人来说,没有/注释的 POJO@Entity会被持久化到 MongoDb 中,并且还会创建集合。只有注释才会@Document导致索引创建。

1

只是为了作为OP添加回来。我不知道是什么导致了我的问题,但我无法在演示项目中重新创建它,并且在我的应用程序中进行进一步测试后问题就消失了......

2

您好,只是为了做出贡献,我已设置好所有配置,但它不起作用,然后在我的中进行了以下更改MongoConfig

之前(未创建索引)

  @Bean(name = "QualifierName")
  public MongoTemplate mongoTemplate() {
      ConnectionString connectionString = new ConnectionString(this.uri);
      MongoDatabaseFactory clientDatabaseFactory = new SimpleMongoClientDatabaseFactory(connectionString);
      return new MongoTemplate(clientDatabaseFactory);
  }

之后(创建索引)-刚刚添加MappingMongoConverter

    @Bean(name = "QualifierName")
    public MongoTemplate mongoTemplate(MappingMongoConverter converter) {
        ConnectionString connectionString = new ConnectionString(this.uri);
        MongoDatabaseFactory clientDatabaseFactory = new SimpleMongoClientDatabaseFactory(connectionString);
        return new MongoTemplate(clientDatabaseFactory, converter);
    }
5

在我的一个项目中,我也面临类似的问题,并且 AbstractMongoClientConfiguration 类不包含 autoIndexCreation 方法。请建议我方法。我已经在 application.properties 中设置为 true,并且没有在任何子类中的“AbstractMongoClientConfiguration”中使用。

6

我认为下面的配置有效。不是自动索引创建=true

spring:
  data:
    mongodb:
      autoIndexCreation: true