Skip to content

Instantly share code, notes, and snippets.

@robsonkades
Created August 16, 2023 01:34
Show Gist options
  • Save robsonkades/9452f3023e244c42618d3160b6b9e1ef to your computer and use it in GitHub Desktop.
Save robsonkades/9452f3023e244c42618d3160b6b9e1ef to your computer and use it in GitHub Desktop.
Mongo
public class DynamicMongoClientFactory {
public DynamicMongoClientFactory() {}
public MongoClient createMongoClient(String uri) {
StandardMongoClientSettingsBuilderCustomizer standardMongoClientSettingsBuilderCustomizer = new StandardMongoClientSettingsBuilderCustomizer(new ConnectionString(uri), UuidRepresentation.JAVA_LEGACY, new MongoProperties.Ssl(), new DefaultSslBundleRegistry());
MongoClientSettings mongoClientSettings = MongoClientSettings
.builder()
.applicationName("user")
.applyConnectionString(new ConnectionString(uri)).build();
return new MongoClientFactory(List.of(standardMongoClientSettingsBuilderCustomizer)).createMongoClient(mongoClientSettings);
}
}
-------------------
@Configuration
public class MongoConfig {
@Bean
public DynamicMongoClientFactory dynamicMongoClientFactory() {
return new DynamicMongoClientFactory();
}
@Bean
public MongoClient mongoClient(DynamicMongoClientFactory dynamicMongoClientFactory) {
// MongoClientSettings.builder().build();
return dynamicMongoClientFactory.createMongoClient(" URL ");
}
@Bean
public RoutingMongoDatabaseFactory mongoDatabaseFactory(MongoClient mongoClient) {
return new RoutingMongoDatabaseFactory(mongoClient, "defaultDatabase");
}
@Bean
public MongoTemplate mongoTemplate(RoutingMongoDatabaseFactory routingMongoDatabaseFactory) {
return new MongoTemplate(routingMongoDatabaseFactory);
}
}
------------------------
public class RoutingMongoDatabaseFactory extends SimpleMongoClientDatabaseFactory {
private final String databaseName;
Map<String, MongoClient> stringMongoClientMap = new ConcurrentHashMap<>();
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public RoutingMongoDatabaseFactory(MongoClient mongoClient, String databaseName) {
super(mongoClient, databaseName);
this.databaseName = databaseName;
stringMongoClientMap.put("abdocs", mongoClient);
}
@Override
protected MongoClient getMongoClient() {
MongoClient x = stringMongoClientMap.get("X");
if (x == null) {
MongoClient mongoClient = MongoClients.create(MongoContextHolder.getMongoDbInfo());
stringMongoClientMap.put("X", mongoClient);
return mongoClient;
}
return x;
}
@Override
protected String getDefaultDatabaseName() {
return databaseName;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment