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

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

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

谢谢!!

最佳答案

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


MongoClientOptions提供您可以配置的属性列表
利用以下MongoClient的构造函数

公共MongoClient(列出服务器地址,列出凭据列表,MongoClientOptions选项){
            超级(种子,凭据列表,选项);
        }


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


使用MongoClient创建一个SimpleMongoDBFactory
最后利用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;

    }

关于java - MongoDB Java驱动程序的自定义实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41520720/

10-09 22:15