Spring Data MongoDB配置数据库bean

时间:2018-02-06 07:36:47

标签: spring spring-boot spring-data-mongodb

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

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

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

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

我知道spring数据mongodb使用旧版本,所以我只用新版本替换它。

1 个答案:

答案 0 :(得分:1)

如果您希望自己配置MongoTemplate或MongoDatabase,则需要处理好几件事。

  1. 您需要禁用spring boot的Mongo Auto Configuration。您可以如下所示实现此目的。

    @SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})  
    
  2. 您必须创建MongoTemplate或MongoDatabase 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);
    }
    
  3. 将XYZCodec替换为您想要的编解码器。