Compare commits

..

14 Commits
0.11.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
Maverick Studer
987e720dad Merge branch 'feature/RED-9348' into 'main'
RED-9348: Move component log to Mongo

See merge request fforesight/mongo-database-commons!15
2024-09-23 16:05:31 +02:00
Maverick Studer
0f351a0e13 RED-9348: Move component log to Mongo 2024-09-23 16:05:31 +02:00
Maverick Studer
0b57648740 Merge branch 'hotfix-queue-name' into 'main'
queue rename and update tenant-commons version

See merge request fforesight/mongo-database-commons!14
2024-08-29 10:20:10 +02:00
maverickstuder
a68912407c queue rename and update tenant-commons version 2024-08-29 10:17:12 +02:00
12 changed files with 61 additions and 123 deletions

1
.gitignore vendored
View File

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

View File

@ -18,4 +18,5 @@ deploy:
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- if: $CI_COMMIT_BRANCH =~ /^release/
- if: $CI_COMMIT_BRANCH =~ /^feature/
- if: $CI_COMMIT_TAG

View File

@ -1,7 +1,6 @@
plugins {
`java-library`
`maven-publish`
`kotlin-dsl`
pmd
checkstyle
jacoco
@ -25,10 +24,11 @@ repositories {
val springBootVersion = "3.1.5"
dependencies {
api("com.knecon.fforesight:tenant-commons:0.26.0")
api("org.liquibase:liquibase-core:4.20.0")
api("org.liquibase.ext:liquibase-mongodb:4.20.0")
api("com.knecon.fforesight:tenant-commons:0.31.0")
api("org.liquibase:liquibase-core:4.29.2")
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-validation:${springBootVersion}")
api("org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}")
api("org.projectlombok:lombok:1.18.28")
runtimeOnly("org.springframework.boot:spring-boot-devtools:${springBootVersion}")
@ -83,7 +83,7 @@ tasks.named<Test>("test") {
sonarqube {
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")
}
}
@ -103,4 +103,4 @@ tasks.jacocoTestReport {
java {
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-dlq}")
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;
import java.util.List;
import java.util.concurrent.TimeUnit;
import jakarta.validation.constraints.NotNull;
import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.conversions.Bson;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import com.knecon.fforesight.mongo.database.commons.service.MongoDataSources;
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.ClientSession;
import com.mongodb.client.ListDatabasesIterable;
@ -40,6 +45,7 @@ public class MultiTenantMongoDBFactory extends SimpleMongoClientDatabaseFactory
private static MongoClient getBootstrapMongoClient() {
return new MongoClient() {
@Override
public MongoDatabase getDatabase(String s) {

View File

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

View File

@ -23,7 +23,7 @@ public class MongoLiquibaseConfig {
@Bean
public TenantMongoLiquibaseExecutor tenantLiquibase(EncryptionDecryptionService encryptionService,
public TenantMongoLiquibaseExecutor tenantMongoLiquibaseExecutor(EncryptionDecryptionService encryptionService,
TenantProvider tenantProvider,
@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

@ -1,6 +1,8 @@
package com.knecon.fforesight.mongo.database.commons.liquibase;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
@ -96,6 +98,12 @@ public class TenantMongoLiquibaseExecutor implements InitializingBean, ResourceL
liquibase.setChangeLog(tenantMongoLiquibaseProperties.getChangeLog());
liquibase.setContexts(tenantMongoLiquibaseProperties.getContexts());
liquibase.setClearCheckSums(tenantMongoLiquibaseProperties.isClearChecksums());
String databaseName = database.getConnection().getCatalog(); // or getDatabaseName() depending on your implementation
Map<String, String> changeLogParameters = new HashMap<>();
changeLogParameters.put("databaseName", databaseName);
liquibase.setChangeLogParameters(changeLogParameters);
liquibase.afterPropertiesSet();
}

View File

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