Compare commits

..

10 Commits
0.13.0 ... main

Author SHA1 Message Date
Dominique Eifländer
88b64e7116 Merge branch 'RED-10526' into 'main'
RED-10526: Set liquibase to 4.29.2 as 4.30.0 is 3 times slower

See merge request fforesight/mongo-database-commons!20
2024-12-02 09:33:27 +01:00
Dominique Eifländer
8e9c80dbd8 RED-10526: Set liquibase to 4.29.2 as 4.30.0 is 3 times slower 2024-12-02 09:31:50 +01:00
Dominique Eifländer
92e4b67ea2 Merge branch 'RED-10526' into 'main'
RED-10526: Upgrade liquibase to 4.30.0

See merge request fforesight/mongo-database-commons!19
2024-11-26 09:55:34 +01:00
Dominique Eifländer
39c32ffa12 RED-10526: Upgrade liquibase to 4.30.0 2024-11-26 09:52:00 +01:00
Timo Bejan
d52a3f4648 Merge branch 'RED-10106' into 'main'
Renamed bean to remove allow-bean-definition-overrides

See merge request fforesight/mongo-database-commons!18
2024-09-25 14:36:43 +02:00
Timo Bejan
df42a6bd91 Renamed bean to remove allow-bean-definition-overrides 2024-09-25 15:33:33 +03:00
Timo Bejan
d5aece1287 Merge branch 'RED-10106' into 'main'
RED-10106 - adjusted bean name for consistency

See merge request fforesight/mongo-database-commons!17
2024-09-25 13:24:18 +02:00
Timo Bejan
5cddef012d RED-10106 - adjusted bean name for consistency 2024-09-25 14:22:38 +03:00
Timo Bejan
0f1d9d11f2 Merge branch 'RED-10106' into 'main'
Updated to latest tenant-commons, adjusted listeners

See merge request fforesight/mongo-database-commons!16
2024-09-25 13:16:12 +02:00
Timo Bejan
27925d6b3c Updated to latest tenant-commons, adjusted listeners 2024-09-25 14:13:42 +03:00
10 changed files with 52 additions and 123 deletions

1
.gitignore vendored
View File

@ -40,3 +40,4 @@ gradle/
**/.gradle **/.gradle
**/build **/build
.DS_Store

View File

@ -1,7 +1,6 @@
plugins { plugins {
`java-library` `java-library`
`maven-publish` `maven-publish`
`kotlin-dsl`
pmd pmd
checkstyle checkstyle
jacoco jacoco
@ -25,10 +24,11 @@ repositories {
val springBootVersion = "3.1.5" val springBootVersion = "3.1.5"
dependencies { dependencies {
api("com.knecon.fforesight:tenant-commons:0.29.0") api("com.knecon.fforesight:tenant-commons:0.31.0")
api("org.liquibase:liquibase-core:4.20.0") api("org.liquibase:liquibase-core:4.29.2")
api("org.liquibase.ext:liquibase-mongodb:4.20.0") api("org.liquibase.ext:liquibase-mongodb:4.29.2")
api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootVersion}") api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootVersion}")
api("org.springframework.boot:spring-boot-starter-validation:${springBootVersion}")
api("org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}") api("org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}")
api("org.projectlombok:lombok:1.18.28") api("org.projectlombok:lombok:1.18.28")
runtimeOnly("org.springframework.boot:spring-boot-devtools:${springBootVersion}") runtimeOnly("org.springframework.boot:spring-boot-devtools:${springBootVersion}")
@ -83,7 +83,7 @@ tasks.named<Test>("test") {
sonarqube { sonarqube {
properties { properties {
property("sonar.login", providers.gradleProperty("sonarToken").getOrNull()) providers.gradleProperty("sonarToken").getOrNull()?.let { property("sonar.login", it) }
property("sonar.host.url", "https://sonarqube.knecon.com") property("sonar.host.url", "https://sonarqube.knecon.com")
} }
} }
@ -103,4 +103,4 @@ tasks.jacocoTestReport {
java { java {
withJavadocJar() withJavadocJar()
} }

View File

@ -1,59 +0,0 @@
package com.knecon.fforesight.mongo.database.commons;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import com.knecon.fforesight.mongo.database.commons.liquibase.EnableMongoLiquibaseCondition;
import lombok.RequiredArgsConstructor;
@Configuration
@RequiredArgsConstructor
@Conditional(EnableMongoLiquibaseCondition.class)
public class MongoTenantMessagingConfiguration {
@Value("${fforesight.mongo.multitenancy.tenant-created-queue:mongo-tenant-created}")
private String mongoTenantCreatedEventQueue;
@Value("${fforesight.mongo.multitenancy.tenant-created-dlq:mongo-tenant-created-error}")
private String mongoTenantCreatedDLQ;
@Bean(name = "mongoTenantExchange")
TopicExchange mongoTenantExchange(@Value("${fforesight.tenant-exchange.name:tenants-exchange}") String tenantExchangeName) {
return new TopicExchange(tenantExchangeName);
}
@Bean("persistenceServiceMongoTenantCreatedQueue")
public Queue persistenceServiceMongoTenantCreatedQueue() {
return QueueBuilder.durable(mongoTenantCreatedEventQueue)
.withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", mongoTenantCreatedDLQ).build();
}
@Bean("persistenceServiceMongoTenantDLQ")
public Queue persistenceServiceMongoTenantDLQ() {
return QueueBuilder.durable(mongoTenantCreatedDLQ).build();
}
@Bean("mongoTenantExchangeBinding")
public Binding mongoTenantExchangeBinding(@Qualifier("persistenceServiceMongoTenantCreatedQueue") Queue persistenceServiceTenantCreatedQueue,
@Qualifier("mongoTenantExchange") TopicExchange tenantExchange) {
return BindingBuilder.bind(persistenceServiceTenantCreatedQueue).to(tenantExchange).with("tenant.created");
}
}

View File

@ -1,15 +1,20 @@
package com.knecon.fforesight.mongo.database.commons.config; package com.knecon.fforesight.mongo.database.commons.config;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import jakarta.validation.constraints.NotNull;
import org.bson.Document; import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.conversions.Bson; import org.bson.conversions.Bson;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory; import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import com.knecon.fforesight.mongo.database.commons.service.MongoDataSources; import com.knecon.fforesight.mongo.database.commons.service.MongoDataSources;
import com.mongodb.ClientSessionOptions; import com.mongodb.ClientSessionOptions;
import com.mongodb.ReadConcern;
import com.mongodb.ReadPreference;
import com.mongodb.WriteConcern;
import com.mongodb.client.ChangeStreamIterable; import com.mongodb.client.ChangeStreamIterable;
import com.mongodb.client.ClientSession; import com.mongodb.client.ClientSession;
import com.mongodb.client.ListDatabasesIterable; import com.mongodb.client.ListDatabasesIterable;
@ -40,6 +45,7 @@ public class MultiTenantMongoDBFactory extends SimpleMongoClientDatabaseFactory
private static MongoClient getBootstrapMongoClient() { private static MongoClient getBootstrapMongoClient() {
return new MongoClient() { return new MongoClient() {
@Override @Override
public MongoDatabase getDatabase(String s) { public MongoDatabase getDatabase(String s) {

View File

@ -2,11 +2,12 @@ package com.knecon.fforesight.mongo.database.commons.liquibase;
import java.util.Objects; import java.util.Objects;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.core.type.AnnotatedTypeMetadata;
import jakarta.validation.constraints.NotNull;
public class EnableMongoLiquibaseCondition implements Condition { public class EnableMongoLiquibaseCondition implements Condition {
@Override @Override

View File

@ -23,7 +23,7 @@ public class MongoLiquibaseConfig {
@Bean @Bean
public TenantMongoLiquibaseExecutor tenantLiquibase(EncryptionDecryptionService encryptionService, public TenantMongoLiquibaseExecutor tenantMongoLiquibaseExecutor(EncryptionDecryptionService encryptionService,
TenantProvider tenantProvider, TenantProvider tenantProvider,
@Qualifier("tenantMongoLiquibaseProperties") LiquibaseProperties mongoLiquibaseProperties) { @Qualifier("tenantMongoLiquibaseProperties") LiquibaseProperties mongoLiquibaseProperties) {

View File

@ -1,14 +0,0 @@
package com.knecon.fforesight.mongo.database.commons.liquibase;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MongoTenantCreatedEvent {
private String tenantId;
}

View File

@ -1,39 +0,0 @@
package com.knecon.fforesight.mongo.database.commons.liquibase;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Service;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
@Conditional(EnableMongoLiquibaseCondition.class)
public class MongoTenantCreatedListener {
private final TenantMongoLiquibaseExecutor tenantMongoLiquibaseExecutor;
@Value("${fforesight.multitenancy.mongo.tenant-created-queue:mongo-tenant-created}")
private String tenantCreatedQueue;
@PostConstruct
public void postConstruct() {
log.info("Listener for tenant-created started for queue: {}", tenantCreatedQueue);
}
@SneakyThrows
@RabbitListener(queues = "${fforesight.multitenancy.mongo.tenant-created-queue:mongo-tenant-created}")
public void createTenant(MongoTenantCreatedEvent tenantRequest) {
tenantMongoLiquibaseExecutor.initializeTenant(tenantRequest.getTenantId());
}
}

View File

@ -0,0 +1,33 @@
package com.knecon.fforesight.mongo.database.commons.liquibase;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Service;
import com.knecon.fforesight.tenantcommons.listener.ITenantEventHandler;
import com.knecon.fforesight.tenantcommons.model.TenantCreatedEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
@Conditional(EnableMongoLiquibaseCondition.class)
public class TenantCreatedMongoEventHandler implements ITenantEventHandler<TenantCreatedEvent> {
private final TenantMongoLiquibaseExecutor tenantMongoLiquibaseExecutor;
@Override
public void handle(TenantCreatedEvent tenantCreatedEvent) {
tenantMongoLiquibaseExecutor.initializeTenant(tenantCreatedEvent.getTenantId());
}
@Override
public Class<TenantCreatedEvent> getEventClass() {
return TenantCreatedEvent.class;
}
}

View File

@ -2,7 +2,6 @@ package com.knecon.fforesight.mongo.database.commons.service;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -16,6 +15,7 @@ import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClients;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@ -70,4 +70,4 @@ public class MongoClientCache {
return clients.get(tenantId); return clients.get(tenantId);
} }
} }