gpt4 book ai didi

java - MongoDB Java 驱动程序的自定义实现

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:03 26 4
gpt4 key购买 nike

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

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

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

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

谢谢!!

最佳答案

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

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

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

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

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

  • 使用 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com