From 1370f03d5072c14df394f0f3a3820a41f3c307fa Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Mon, 25 Mar 2024 15:24:21 +0100 Subject: [PATCH] refactoring --- .../commons/config/MongoDbConfiguration.java | 4 ++++ .../liquibase/MongoLiquibaseConfig.java | 9 ++++---- ...vent.java => MongoTenantCreatedEvent.java} | 2 +- .../liquibase/MongoTenantCreatedListener.java | 2 +- .../TenantMongoLiquibaseExecutor.java | 8 +++---- .../commons/service/MongoDataSources.java | 22 +++++++++++++------ 6 files changed, 29 insertions(+), 18 deletions(-) rename src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/{TenantCreatedEvent.java => MongoTenantCreatedEvent.java} (85%) diff --git a/src/main/java/com/knecon/fforesight/mongo/database/commons/config/MongoDbConfiguration.java b/src/main/java/com/knecon/fforesight/mongo/database/commons/config/MongoDbConfiguration.java index 97b6601..ebdb7c6 100644 --- a/src/main/java/com/knecon/fforesight/mongo/database/commons/config/MongoDbConfiguration.java +++ b/src/main/java/com/knecon/fforesight/mongo/database/commons/config/MongoDbConfiguration.java @@ -9,6 +9,8 @@ import org.bson.Document; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; import org.springframework.data.mongodb.core.convert.MongoCustomConversions; @Configuration @@ -21,6 +23,7 @@ public class MongoDbConfiguration { } + @WritingConverter public static class MongoOffsetDateTimeWriter implements Converter { public static final String DATE_FIELD = "dateTime"; @@ -38,6 +41,7 @@ public class MongoDbConfiguration { } + @ReadingConverter public static class MongoOffsetDateTimeReader implements Converter { @Override diff --git a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoLiquibaseConfig.java b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoLiquibaseConfig.java index 4629497..2ff88bc 100644 --- a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoLiquibaseConfig.java +++ b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoLiquibaseConfig.java @@ -1,5 +1,6 @@ package com.knecon.fforesight.mongo.database.commons.liquibase; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -11,9 +12,9 @@ import com.knecon.fforesight.tenantcommons.TenantProvider; @Configuration public class MongoLiquibaseConfig { - @Bean + @Bean(name = "tenantMongoLiquibaseProperties") @ConfigurationProperties("multitenancy.tenant.mongo.liquibase") - public LiquibaseProperties tenantLiquibaseProperties() { + public LiquibaseProperties tenantMongoLiquibaseProperties() { return new LiquibaseProperties(); } @@ -22,8 +23,8 @@ public class MongoLiquibaseConfig { @Bean public TenantMongoLiquibaseExecutor tenantLiquibase(EncryptionDecryptionService encryptionService, TenantProvider tenantProvider, - LiquibaseProperties tenantLiquibaseProperties) { + @Qualifier("tenantMongoLiquibaseProperties") LiquibaseProperties mongoLiquibaseProperties) { - return new TenantMongoLiquibaseExecutor(encryptionService, tenantProvider, tenantLiquibaseProperties); + return new TenantMongoLiquibaseExecutor(encryptionService, tenantProvider, mongoLiquibaseProperties); } } diff --git a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantCreatedEvent.java b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedEvent.java similarity index 85% rename from src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantCreatedEvent.java rename to src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedEvent.java index 4bd05e4..d7a2073 100644 --- a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantCreatedEvent.java +++ b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedEvent.java @@ -7,7 +7,7 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class TenantCreatedEvent { +public class MongoTenantCreatedEvent { private String tenantId; diff --git a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedListener.java b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedListener.java index 928e9ee..46420af 100644 --- a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedListener.java +++ b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/MongoTenantCreatedListener.java @@ -29,7 +29,7 @@ public class MongoTenantCreatedListener { @SneakyThrows @RabbitListener(queues = "${fforesight.multitenancy.tenant-created-queue:tenant-created}") - public void createTenant(TenantCreatedEvent tenantRequest) { + public void createTenant(MongoTenantCreatedEvent tenantRequest) { tenantMongoLiquibaseExecutor.initializeTenant(tenantRequest.getTenantId()); } diff --git a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantMongoLiquibaseExecutor.java b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantMongoLiquibaseExecutor.java index 8f50492..3c12bf6 100644 --- a/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantMongoLiquibaseExecutor.java +++ b/src/main/java/com/knecon/fforesight/mongo/database/commons/liquibase/TenantMongoLiquibaseExecutor.java @@ -3,7 +3,6 @@ package com.knecon.fforesight.mongo.database.commons.liquibase; import java.util.List; import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.ResourceLoader; @@ -34,8 +33,7 @@ public class TenantMongoLiquibaseExecutor implements InitializingBean, ResourceL private final TenantProvider tenantProvider; - @Qualifier("tenantLiquibaseProperties") - private final LiquibaseProperties tenantLiquibaseProperties; + private final LiquibaseProperties tenantMongoLiquibaseProperties; @Setter private ResourceLoader resourceLoader; @@ -70,8 +68,8 @@ public class TenantMongoLiquibaseExecutor implements InitializingBean, ResourceL .openDatabase(mongoUrl, mongoDBConnection.getUsername(), encryptionService.decrypt(mongoDBConnection.getPassword()), null, null)) { try (SpringResourceAccessor resourceAccessor = new SpringResourceAccessor(resourceLoader)) { - try (Liquibase liquibase = new Liquibase(tenantLiquibaseProperties.getChangeLog(), resourceAccessor, database)) { - Contexts contexts = new Contexts(tenantLiquibaseProperties.getContexts()); + try (Liquibase liquibase = new Liquibase(tenantMongoLiquibaseProperties.getChangeLog(), resourceAccessor, database)) { + Contexts contexts = new Contexts(tenantMongoLiquibaseProperties.getContexts()); List changeSetsList = liquibase.listUnrunChangeSets(contexts, null); if (!changeSetsList.isEmpty()) { liquibase.update(contexts); diff --git a/src/main/java/com/knecon/fforesight/mongo/database/commons/service/MongoDataSources.java b/src/main/java/com/knecon/fforesight/mongo/database/commons/service/MongoDataSources.java index 19a6509..f3a4f5e 100644 --- a/src/main/java/com/knecon/fforesight/mongo/database/commons/service/MongoDataSources.java +++ b/src/main/java/com/knecon/fforesight/mongo/database/commons/service/MongoDataSources.java @@ -4,8 +4,11 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Lazy; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +import org.springframework.data.mongodb.core.convert.MongoCustomConversions; import org.springframework.stereotype.Component; +import com.knecon.fforesight.mongo.database.commons.config.MultiTenantMongoDBFactory; import com.knecon.fforesight.mongo.database.commons.exception.MongoDBTenantException; import com.knecon.fforesight.tenantcommons.TenantContext; import com.mongodb.client.MongoClient; @@ -22,26 +25,31 @@ public class MongoDataSources { @Bean - @Lazy public String databaseName() { - return "dummy"; + final String tenantId = TenantContext.getTenantId(); + + return tenantId == null ? "redaction" : tenantId; } @Bean - @Lazy public MongoClient getMongoClient() { - return MongoClients.create(); + final String tenantId = TenantContext.getTenantId(); + + return tenantId == null ? MongoClients.create() : mongoClientCache.getClient(tenantId); } @Bean - @Lazy - public MongoTemplate mongoTemplate(@Qualifier("getMongoClient") MongoClient mongoClient, String databaseName) { + public MongoTemplate mongoTemplate(MultiTenantMongoDBFactory mongoDBFactory, MongoCustomConversions mongoCustomConversions) { - return new MongoTemplate(mongoClient, databaseName); + MongoTemplate mongoTemplate = new MongoTemplate(mongoDBFactory); + MappingMongoConverter conv = (MappingMongoConverter) mongoTemplate.getConverter(); + conv.setCustomConversions(mongoCustomConversions); + conv.afterPropertiesSet(); + return mongoTemplate; }