1

我需要编写自己的“com.mongodb.MongoClient”实现,以便在 MongoTemplate 中动态添加数据库凭据。

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

我可以写下我的 MongoClient 自定义实现吗?如果是的话,应该如何实现它来满足动态数据库凭证的变化?

请注意,传递给“com.mongodb.MongoClient”构造函数的“credentialsList”被转换为“unmodifiableList”,因此无法更新。

谢谢!!

4

1 回答 1

0

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

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

  2. 使用 MongoClient 的以下构造函数

    public MongoClient(List serveraddress, List credentialsList, MongoClientOptions options) { super(seeds, credentialsList, options); }

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

  1. 使用 MongoClient 创建 SimpleMongoDBFactory

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

将所有内容放在一起:

    @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;

    }
于 2017-01-07T12:14:20.537 回答