Skip to content

Commit 0dfe9eb

Browse files
authored
refactor: use FlamingockSpringbootTestSupport and beta.6 (#5)
1 parent 59f0d97 commit 0dfe9eb

File tree

5 files changed

+160
-520
lines changed

5 files changed

+160
-520
lines changed

inventory-orders-service/build.gradle.kts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ repositories {
2828
group = "io.flamingock"
2929
version = "1.0-SNAPSHOT"
3030

31-
val flamingockVersion = "1.0.0-beta.5"
31+
val flamingockVersion = "1.0.0-beta.6"
3232
logger.lifecycle("Building with flamingock version: $flamingockVersion")
3333

3434
val mongodbVersion = "5.5.1"
@@ -73,12 +73,16 @@ dependencies {
7373
// Others dependencies needed for this example
7474
// implementation("org.slf4j:slf4j-simple:2.0.6") // Commented out - Spring Boot provides logging
7575

76+
testImplementation("org.springframework.boot:spring-boot-starter-test")
77+
testImplementation("io.flamingock:flamingock-springboot-test-support")
7678
testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2")
7779
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2")
7880

79-
testImplementation("org.testcontainers:testcontainers-mongodb:2.0.2")
80-
testImplementation("org.testcontainers:testcontainers-kafka:2.0.2")
81-
testImplementation("org.testcontainers:testcontainers-junit-jupiter:2.0.2")
81+
testImplementation("org.springframework.boot:spring-boot-testcontainers")
82+
testImplementation("org.testcontainers:testcontainers:1.21.4")
83+
testImplementation("org.testcontainers:mongodb:1.21.4")
84+
testImplementation("org.testcontainers:kafka:1.21.4")
85+
testImplementation("org.testcontainers:junit-jupiter:1.21.4")
8286
}
8387

8488
application {

inventory-orders-service/gradlew

Lines changed: 1 addition & 244 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,46 @@
11
package io.flamingock.examples.inventory;
22

33
import com.mongodb.client.MongoClient;
4+
import io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient;
5+
import io.confluent.kafka.schemaregistry.client.SchemaRegistryClient;
46
import io.flamingock.community.mongodb.sync.driver.MongoDBSyncAuditStore;
7+
import io.flamingock.examples.inventory.util.KafkaSchemaManager;
8+
import io.flamingock.examples.inventory.util.LaunchDarklyClient;
59
import io.flamingock.examples.inventory.util.MongoDBUtil;
610
import io.flamingock.internal.core.store.CommunityAuditStore;
711
import io.flamingock.targetsystem.nontransactional.NonTransactionalTargetSystem;
812
import io.flamingock.targetystem.mongodb.sync.MongoDBSyncTargetSystem;
13+
import org.apache.kafka.clients.admin.AdminClient;
14+
import org.apache.kafka.clients.admin.AdminClientConfig;
15+
import org.springframework.beans.factory.annotation.Value;
916
import org.springframework.context.annotation.Bean;
1017
import org.springframework.context.annotation.Configuration;
1118

19+
import jakarta.annotation.PreDestroy;
20+
import java.time.Duration;
21+
import java.util.Collections;
22+
import java.util.Properties;
23+
1224
@Configuration
1325
public class FlamingockConfig {
1426

15-
@Bean
27+
@Value("${mongodb.uri:mongodb://localhost:27017/}")
28+
private String mongodbUri;
29+
30+
@Value("${kafka.bootstrap-servers:localhost:9092}")
31+
private String kafkaBootstrapServers;
32+
33+
@Value("${kafka.schema-registry-url:http://localhost:8081}")
34+
private String schemaRegistryUrl;
35+
36+
@Value("${launchdarkly.api-url:http://localhost:8765/api/v2}")
37+
private String launchDarklyApiUrl;
38+
39+
private AdminClient kafkaAdminClient;
40+
41+
@Bean(destroyMethod = "close")
1642
public MongoClient mongoClient() {
17-
return MongoDBUtil.getMongoClient("mongodb://localhost:27017/");
43+
return MongoDBUtil.getMongoClient(mongodbUri);
1844
}
1945

2046
@Bean
@@ -24,12 +50,29 @@ public MongoDBSyncTargetSystem mongoDBSyncTargetSystem(MongoClient mongoClient)
2450

2551
@Bean
2652
public NonTransactionalTargetSystem kafkaTargetSystem() throws Exception {
27-
return TargetSystems.kafkaTargetSystem();
53+
SchemaRegistryClient schemaRegistryClient = new CachedSchemaRegistryClient(
54+
Collections.singletonList(schemaRegistryUrl),
55+
100
56+
);
57+
58+
Properties kafkaProps = new Properties();
59+
kafkaProps.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapServers);
60+
this.kafkaAdminClient = AdminClient.create(kafkaProps);
61+
62+
KafkaSchemaManager schemaManager = new KafkaSchemaManager(schemaRegistryClient, kafkaAdminClient);
63+
schemaManager.createTopicIfNotExists("order-created", 3, (short) 1);
64+
return new NonTransactionalTargetSystem(TargetSystems.KAFKA_TARGET_SYSTEM).addDependency(schemaManager);
2865
}
2966

3067
@Bean
3168
public NonTransactionalTargetSystem toggleTargetSystem() {
32-
return TargetSystems.toggleTargetSystem();
69+
LaunchDarklyClient launchDarklyClient = new LaunchDarklyClient(
70+
"demo-token",
71+
"inventory-service",
72+
"production",
73+
launchDarklyApiUrl
74+
);
75+
return new NonTransactionalTargetSystem(TargetSystems.FEATURE_FLAG_TARGET_SYSTEM).addDependency(launchDarklyClient);
3376
}
3477

3578

@@ -38,4 +81,11 @@ public NonTransactionalTargetSystem toggleTargetSystem() {
3881
public CommunityAuditStore auditStore(MongoDBSyncTargetSystem mongoDBSyncTargetSystem) {
3982
return MongoDBSyncAuditStore.from(mongoDBSyncTargetSystem);
4083
}
84+
85+
@PreDestroy
86+
public void cleanup() {
87+
if (kafkaAdminClient != null) {
88+
kafkaAdminClient.close(Duration.ofSeconds(2));
89+
}
90+
}
4191
}

0 commit comments

Comments
 (0)