• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MongoDb 自动创建索引

武飞扬头像
bang2tang2
帮助1

spring-data-mongodb 3.0后默认不会自动创建索引

学新通

有三种方式可以解决:

首先对应的实体类上面需要有Document注解

学新通

1、修改配置(推荐,简单)

学新通

properties:

spring.data.mongodb.auto-index-creation=true

yaml:

  1.  
    spring:
  2.  
    data:
  3.  
    mognodb:
  4.  
    auto-index-creation: true

 2、继承AbstractMongoClientConfiguration

修改代码中your_开头的属性,改为自己的mongodb连接配置

  1.  
     
  2.  
    import com.mongodb.MongoClientSettings;
  3.  
    import com.mongodb.MongoCredential;
  4.  
    import com.mongodb.ServerAddress;
  5.  
    import com.mongodb.client.MongoClient;
  6.  
    import com.mongodb.client.MongoClients;
  7.  
    import org.springframework.context.annotation.Configuration;
  8.  
    import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
  9.  
     
  10.  
    import java.util.Arrays;
  11.  
    @Configuration
  12.  
    public class MongoDBDataSourceConfig extends AbstractMongoClientConfiguration {
  13.  
    @Override
  14.  
    public MongoClient mongoClient() {
  15.  
    MongoClient mongoClient = MongoClients.create(
  16.  
    MongoClientSettings.builder()
  17.  
    .applyToClusterSettings(builder ->builder.hosts(Arrays.asList(new ServerAddress(your_host, your_port))))
  18.  
    // 凭据
  19.  
    .credential(MongoCredential.createCredential(your_username, your_dbname,your_password.toCharArray()))
  20.  
    .build());
  21.  
    return mongoClient;
  22.  
    }
  23.  
    @Override
  24.  
    protected String getDatabaseName() {
  25.  
    return your_dbname;
  26.  
    }
  27.  
    @Override
  28.  
    protected boolean autoIndexCreation() {
  29.  
    return true;
  30.  
    }
  31.  
    }
学新通

3、手动获取索引执行

  1.  
    import lombok.RequiredArgsConstructor;
  2.  
    import lombok.extern.slf4j.Slf4j;
  3.  
    import org.springframework.boot.context.event.ApplicationReadyEvent;
  4.  
    import org.springframework.context.annotation.Configuration;
  5.  
    import org.springframework.context.event.EventListener;
  6.  
    import org.springframework.data.mapping.context.MappingContext;
  7.  
    import org.springframework.data.mongodb.core.MongoTemplate;
  8.  
    import org.springframework.data.mongodb.core.convert.MongoConverter;
  9.  
    import org.springframework.data.mongodb.core.index.IndexOperations;
  10.  
    import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver;
  11.  
    import org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity;
  12.  
    import org.springframework.data.mongodb.core.mapping.Document;
  13.  
    import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
  14.  
     
  15.  
     
  16.  
    @Slf4j
  17.  
    @RequiredArgsConstructor
  18.  
    @Configuration
  19.  
    public class MongoConfiguration {
  20.  
    private final MongoTemplate mongoTemplate;
  21.  
    private final MongoConverter mongoConverter;
  22.  
    @EventListener(ApplicationReadyEvent.class)
  23.  
    public void initIndicesAfterStartup() {
  24.  
    LOGGER.info("Mongo InitIndicesAfterStartup init");
  25.  
    long init = System.currentTimeMillis();
  26.  
    MappingContext mappingContext = this.mongoConverter.getMappingContext();
  27.  
    if (mappingContext instanceof MongoMappingContext) {
  28.  
    MongoMappingContext mongoMappingContext = (MongoMappingContext) mappingContext;
  29.  
    for (BasicMongoPersistentEntity<?> persistentEntity : mongoMappingContext.getPersistentEntities()) {
  30.  
    Class clazz = persistentEntity.getType();
  31.  
    if (clazz.isAnnotationPresent(Document.class)) {
  32.  
    MongoPersistentEntityIndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext);
  33.  
    IndexOperations indexOps = mongoTemplate.indexOps(clazz);
  34.  
    resolver.resolveIndexFor(clazz).forEach(indexOps::ensureIndex);
  35.  
    }
  36.  
    }
  37.  
    }
  38.  
    LOGGER.info("Mongo InitIndicesAfterStartup take: {}", (System.currentTimeMillis() - init));
  39.  
    }
  40.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkeaci
系列文章
更多 icon
同类精品
更多 icon
继续加载