【问题标题】:Spring Data MongoDB Configure Database beanSpring Data MongoDB 配置数据库 bean
【发布时间】:2018-02-06 07:36:46
【问题描述】:

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

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

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

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

我知道 spring data mongodb 使用的是旧版本,所以我只是用较新的版本替换了它。

【问题讨论】:

  • 你排除了Mongo Auto Configuration吗?如果不是,如果你想自己声明 Mongo bean,你应该这样做

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


【解决方案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);
    }
    

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

【讨论】:

  • 这很烦人...我正在创建一个其他人将使用的库,因此它需要支持 Mongo 自动配置的不同方式(因此在现有项目上即插即用更容易)。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2013-07-22
相关资源
最近更新 更多