Spring数据MongoDB配置数据库bean

Spring Data MongoDB Configure Database bean

如何配置 Mongo 数据库 bean?该 bean 由 MongoDB 驱动程序以某种方式初始化,并预先配置了一些东西。我无法使用 mongoClient.getDatabase() 获取 bean,因为数据库名称来自连接 uri 或仅来自标准 属性。而且我不能像这样定义一个新 bean 来更新旧 bean public MongoDatabase mongoDatabase(MongoDatabase database) 因为这会导致禁止定义循环。我该怎么办?

与问题不完全相关,但这是我的意图:

我想做的是添加 MongoDB 驱动程序版本 3.6 中引入的自定义约定。

http://mongodb.github.io/mongo-java-driver/3.6/bson/pojos/

我知道 spring 数据 mongodb 使用的是旧版本,所以我只是将其替换为较新的版本。

如果您想自己配置Mongo模板或Mongo数据库,您需要注意几件事。

  1. 您需要禁用 spring 启动的 Mongo 自动配置。您可以如下所示实现此目的。

    @SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})  
    
  2. 您必须创建 Mongo 模板或 Mongo 数据库 bean 并将其注册到 Spring 应用程序上下文(使用 @Bean)。

    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
    
       ServerAddress server = new ServerAddress(host,port);
    
       MongoClientOptions.Builder builder = MongoClientOptions.builder();
       CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new XYZCodec(..)),
       MongoClient.getDefaultCodecRegistry());
       builder.codecRegistry(codecRegistry).build();
       MongoClientOptions options = builder.build();
       MongoClient mongoClient = new MongoClient(server,options);
    
       return new SimpleMongoDbFactory(mongoClient, mongoDataBase);
    }
    

将 XYZCodec 替换为您想要的编解码器。