自定义实现MongoDB Java驱动程序

时间:2017-01-07 11:03:49

标签: java mongodb connection-pooling multi-tenant mongotemplate

我需要编写一个自己的实现" com.mongodb.MongoClient"为了在MongoTemplate中动态添加DB凭据。

这是因为:
- 我们正在开发多租户应用程序,数据库是即时创建的。
- 在自动装配MongoTemplate时(在服务器启动时),传递给MongoClient的凭据列表将会发生变化。
- 每次添加新租户时,我们都无法重新注入现有的MongoTemplate。
- 此外,我们必须在所有租户中使用共享连接池,因此,我们不能为每个租户使用不同的MongoTemplate。

我可以写下MongoClient的自定义实现吗?如果是,那么应该如何实施以便随时更改数据库凭据?

请注意," credentialsList"传递给" com.mongodb.MongoClient" construtor,转换为" unmodifiableList",这样就无法更新。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过扩展类来编写自己的MongoClient,但它确实需要吗?不必要。

  1. MongoClientOptions提供了您可以配置的属性列表

  2. 使用以下MongoClient构造函数

    public MongoClient(List serveraddress,List credentialsList,MongoClientOptions options){             super(种子,凭证列表,选项);         }

  3. 传递凭据列表,服务器地址列表及其选项。

    1. 使用MongoClient创建SimpleMongoDBFactory

    2. 最后利用MongoDbFactory创建一个MongoTemplate

    3. 全部放在一起:

          @Bean(destroyMethod="close")
          MongoClient mongoClient(MongoClientOptions mongoClientOptions){
      
              MongoClient mongoClient=new MongoClient(serverAddresses(),credentails(),mongoClientOptions);
      
              return mongoClient;
          }
      
      
          @Bean
          public  MongoClientOptions mongoClientOptions(){
      
              MongoClientOptions.Builder builder = MongoClientOptions.builder();
              MongoClientOptions options=builder.sslEnabled(true).build();        
              return options;
          }
      
          @Bean
          public MongoDbFactory mongoDbFactory(MongoClientOptions mongoClientOptions) throws Exception {
              return new SimpleMongoDbFactory(mongoClient(mongoClientOptions), "yourdb");
          }
      
          @Bean
          public MongoTemplate mongoTemplate(MongoClientOptions mongoClientOptions) throws Exception {
      
              MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(mongoClientOptions));
      
              return mongoTemplate;
      
          }