1

MongoTemplate でオンザフライで DB 資格情報を追加するには、「com.mongodb.MongoClient」の独自の実装を作成する必要があります。

これは、次の理由によるものです。
- マルチテナント アプリケーションで作業しており、データベースはその場で作成されます。
- (サーバーの起動時に) MongoTemplate を自動配線している間、MongoClient に渡される資格情報リストが変更されます。
- 新しいテナントが追加されるたびに、既存の MongoTemplate を再注入できませんでした。
- また、すべてのテナントで共有接続プールを使用する必要があるため、テナントごとに異なる MongoTemplate を使用することはできません。

MongoClient のカスタム実装を書き留めてもよろしいですか? はいの場合、その場で DB 資格情報の変更に対応するためにどのように実装する必要がありますか?

「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 に答える