All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gravity9.mongocse.DefaultMongoClientProvider Maven / Gradle / Ivy

package com.gravity9.mongocse;

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;

import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;

class DefaultMongoClientProvider implements MongoClientProvider {

	private final String mongoConnectionUri;

	private volatile MongoClient client;

	DefaultMongoClientProvider(String mongoConnectionUri) {
		this.mongoConnectionUri = mongoConnectionUri;
	}

	@Override
	public MongoClient getClient() {
		if (client == null) {
			synchronized (this) {
				if (client == null) {
					client = createClient();
				}
			}
		}

		return client;
	}

	private MongoClient createClient() {
		ConnectionString connectionString = new ConnectionString(mongoConnectionUri);
		CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());
		CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
				pojoCodecRegistry);
		MongoClientSettings clientSettings = MongoClientSettings.builder()
				.applyConnectionString(connectionString)
				.codecRegistry(codecRegistry)
				.build();

		return MongoClients.create(clientSettings);
	}

	@Override
	public void close() {
		if (client != null) {
			synchronized (this) {
				if (client != null) {
					client.close();
					client = null;
				}
			}
		}
	}
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy