]> juplo.de Git - demos/kafka/chat/commitdiff
feat: Switched to `spring-boot-starter-data-mongodb-reactive`
authorKai Moritz <kai@juplo.de>
Sat, 3 Feb 2024 23:24:07 +0000 (00:24 +0100)
committerKai Moritz <kai@juplo.de>
Thu, 22 Feb 2024 16:15:04 +0000 (17:15 +0100)
pom.xml
src/main/java/de/juplo/kafka/chat/backend/storage/files/FilesStorageConfiguration.java
src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/ChatRoomRepository.java
src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MessageRepository.java
src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MongoDbStorageStrategy.java
src/main/java/de/juplo/kafka/chat/backend/storage/nostorage/NoStorageStorageConfiguration.java
src/test/java/de/juplo/kafka/chat/backend/AbstractStorageStrategyIT.java
src/test/java/de/juplo/kafka/chat/backend/InMemoryWithMongoDbStorageIT.java
src/test/java/de/juplo/kafka/chat/backend/storage/mongodb/ChatRoomRepositoryIT.java
src/test/java/de/juplo/kafka/chat/backend/storage/mongodb/MessageRepositoryIT.java

diff --git a/pom.xml b/pom.xml
index 9f6db2082163dbebcd011ee719af2097775cdb2b..e98a75e48f2782348b80a0cba1d90e4a0bf69fef 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -44,7 +44,7 @@
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-data-mongodb</artifactId>
+      <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.kafka</groupId>
index 630c1fa940ed5f65b61ca0e782dc7c23a251bbcc..72f8e7d581ff4819cf7115c9cde6f7ae540a1305 100644 (file)
@@ -6,7 +6,8 @@ import de.juplo.kafka.chat.backend.implementation.ShardingStrategy;
 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration;
 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -21,7 +22,8 @@ import java.nio.file.Paths;
 @Configuration
 @EnableAutoConfiguration(
     exclude = {
-        MongoRepositoriesAutoConfiguration.class,
+        MongoReactiveDataAutoConfiguration.class,
+        MongoReactiveRepositoriesAutoConfiguration.class,
         MongoAutoConfiguration.class })
 public class FilesStorageConfiguration
 {
index d9f6a0f54dfd3f99132498941323ce068ce6f9fe..9262bf66a88adc666b413e6d861e54f004123967 100644 (file)
@@ -1,8 +1,8 @@
 package de.juplo.kafka.chat.backend.storage.mongodb;
 
-import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
 
 
-public interface ChatRoomRepository extends MongoRepository<ChatRoomTo, String>
+public interface ChatRoomRepository extends ReactiveMongoRepository<ChatRoomTo, String>
 {
 }
index 712f5a4ab46306d87082767beeb3ba3cba2c45ed..db8503c32ce7aed5eff5be06e9bcf05d757945d3 100644 (file)
@@ -1,11 +1,10 @@
 package de.juplo.kafka.chat.backend.storage.mongodb;
 
-import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
+import reactor.core.publisher.Flux;
 
-import java.util.List;
 
-
-public interface MessageRepository extends MongoRepository<MessageTo, String>
+public interface MessageRepository extends ReactiveMongoRepository<MessageTo, String>
 {
-  List<MessageTo> findByChatRoomIdOrderBySerialAsc(String chatRoomId);
+  Flux<MessageTo> findByChatRoomIdOrderBySerialAsc(String chatRoomId);
 }
index 81696450dc39915ba113d471c112a2c130990d35..13f3c0d6639f2e94fca4fef1b0079ef43c2dc700 100644 (file)
@@ -31,15 +31,15 @@ public class MongoDbStorageStrategy implements StorageStrategy
             loggingLevel,
             showOperatorLine)
         .map(ChatRoomTo::from)
-        .map(chatRoomRepository::save)
+        .flatMap(chatRoomRepository::save)
         .map(ChatRoomTo::toChatRoomInfo);
   }
 
   @Override
   public Flux<ChatRoomInfo> readChatRoomInfo()
   {
-    return Flux
-        .fromIterable(chatRoomRepository.findAll())
+    return chatRoomRepository
+        .findAll()
         .log(
             loggingCategory,
             loggingLevel,
@@ -56,15 +56,15 @@ public class MongoDbStorageStrategy implements StorageStrategy
             loggingLevel,
             showOperatorLine)
         .map(message -> MessageTo.from(chatRoomId, message))
-        .map(messageRepository::save)
+        .flatMap(messageRepository::save)
         .map(MessageTo::toMessage);
   }
 
   @Override
   public Flux<Message> readChatRoomData(UUID chatRoomId)
   {
-    return Flux
-        .fromIterable(messageRepository.findByChatRoomIdOrderBySerialAsc(chatRoomId.toString()))
+    return messageRepository
+        .findByChatRoomIdOrderBySerialAsc(chatRoomId.toString())
         .log(
             loggingCategory,
             loggingLevel,
index 2e499ef388b0f5c658d97cbbf2e03e14a1af555b..dc2bdfcc8bddabefd21522b3440c7d2c8626aef1 100644 (file)
@@ -3,7 +3,8 @@ package de.juplo.kafka.chat.backend.storage.nostorage;
 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration;
 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -17,7 +18,8 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 @EnableAutoConfiguration(
     exclude = {
-        MongoRepositoriesAutoConfiguration.class,
+        MongoReactiveDataAutoConfiguration.class,
+        MongoReactiveRepositoriesAutoConfiguration.class,
         MongoAutoConfiguration.class })
 public class NoStorageStorageConfiguration
 {
index 7c9c07c36abdbca43f5866ac018d29c833efdc01..74c7c6fd63809f49c15aa67259816c083c2c6dd3 100644 (file)
@@ -40,7 +40,7 @@ public abstract class AbstractStorageStrategyIT
   {
     storageStrategy
         .write(chathome)
-        .subscribe();
+        .block();
   }
 
   @Test
index 8f4e37a3d20ad3a02471cd89db287c5567bf3b12..464513bdd9f4135f8f3f5013be056644062f5adf 100644 (file)
@@ -32,8 +32,8 @@ public class InMemoryWithMongoDbStorageIT extends AbstractInMemoryStorageIT
       @Autowired ChatRoomRepository chatRoomRepository,
       @Autowired MessageRepository messageRepository)
   {
-    chatRoomRepository.deleteAll();
-    messageRepository.deleteAll();
+    chatRoomRepository.deleteAll().block();
+    messageRepository.deleteAll().block();
   }
 
   @BeforeEach
index 5c6e10cf99a35c5c73a00dbee94c8b6547f25694..d0a7f6bd86a5c2b5b8b53e36156340501b09d8f8 100644 (file)
@@ -36,33 +36,33 @@ public class ChatRoomRepositoryIT
   @BeforeEach
   public void setUp()
   {
-    repository.deleteAll();
+    repository.deleteAll().block();
 
-    a = repository.save(new ChatRoomTo("a", "foo"));
-    b = repository.save(new ChatRoomTo("b", "bar"));
-    c = repository.save(new ChatRoomTo("c", "bar"));
+    a = repository.save(new ChatRoomTo("a", "foo")).block();
+    b = repository.save(new ChatRoomTo("b", "bar")).block();
+    c = repository.save(new ChatRoomTo("c", "bar")).block();
   }
 
   @Test
   public void findsAll()
   {
-    assertThat(repository.findAll()).containsExactly(a, b, c);
+    assertThat(repository.findAll()).emitsExactly(a, b, c);
   }
 
   @Test
   public void findsById()
   {
-    assertThat(repository.findById("a")).contains(a);
-    assertThat(repository.findById("b")).contains(b);
-    assertThat(repository.findById("c")).contains(c);
-    assertThat(repository.findById("666")).isEmpty();
+    assertThat(repository.findById("a")).emitsExactly(a);
+    assertThat(repository.findById("b")).emitsExactly(b);
+    assertThat(repository.findById("c")).emitsExactly(c);
+    assertThat(repository.findById("666")).emitsExactly();
   }
 
   @Test
   public void findsByExample()
   {
-    assertThat(repository.findAll(Example.of(new ChatRoomTo(null, "foo")))).containsExactly(a);
-    assertThat(repository.findAll(Example.of(new ChatRoomTo(null, "bar")))).containsExactly(b, c);
-    assertThat(repository.findAll(Example.of(new ChatRoomTo(null, "foobar")))).isEmpty();
+    assertThat(repository.findAll(Example.of(new ChatRoomTo(null, "foo")))).emitsExactly(a);
+    assertThat(repository.findAll(Example.of(new ChatRoomTo(null, "bar")))).emitsExactly(b, c);
+    assertThat(repository.findAll(Example.of(new ChatRoomTo(null, "foobar")))).emitsExactly();
   }
 }
index 3e8a716088cfb63eb7190a98c332f29bcd843744..06fddb2f5a301f8543180a17d38d66b04a18cbaf 100644 (file)
@@ -40,7 +40,7 @@ public class MessageRepositoryIT
   @BeforeEach
   public void setUp()
   {
-    repository.deleteAll();
+    repository.deleteAll().block();
 
     foo = UUID.randomUUID();
     bar = UUID.randomUUID();
@@ -54,64 +54,64 @@ public class MessageRepositoryIT
             Message.MessageKey.of("peter", 1l),
             serial++,
             now.plusSeconds(serial),
-            "Nachricht #" + serial)));
+            "Nachricht #" + serial))).block();
     foo_2 = repository.save(MessageTo.from(
         foo,
         new Message(
             Message.MessageKey.of("ute", 2l),
             serial++,
             now.plusSeconds(serial),
-            "Nachricht #" + serial)));
+            "Nachricht #" + serial))).block();
     bar_1 = repository.save(MessageTo.from(
         bar,
         new Message(
             Message.MessageKey.of("klaus", 1l),
             serial++,
             now.plusSeconds(serial),
-            "Nachricht #" + serial)));
+            "Nachricht #" + serial))).block();
     bar_2 = repository.save(MessageTo.from(
         bar,
         new Message(
             Message.MessageKey.of("beate", 2l),
             serial++,
             now.plusSeconds(serial),
-            "Nachricht #" + serial)));
+            "Nachricht #" + serial))).block();
     bar_3 = repository.save(MessageTo.from(
         bar,
         new Message(
             Message.MessageKey.of("peter", 3l),
             serial++,
             now.plusSeconds(serial),
-            "Nachricht #" + serial)));
+            "Nachricht #" + serial))).block();
   }
 
   @Test
   public void findsAll()
   {
-    assertThat(repository.findAll()).containsExactly(foo_1, foo_2, bar_1, bar_2, bar_3);
+    assertThat(repository.findAll()).emitsExactly(foo_1, foo_2, bar_1, bar_2, bar_3);
   }
 
   @Test
   public void findsByExample_chatRoomId()
   {
-    assertThat(repository.findAll(Example.of(new MessageTo(foo.toString(), null, null, null, null, null)))).containsExactly(foo_1, foo_2);
-    assertThat(repository.findAll(Example.of(new MessageTo(bar.toString(), null, null, null, null, null)))).containsExactly(bar_1, bar_2, bar_3);
+    assertThat(repository.findAll(Example.of(new MessageTo(foo.toString(), null, null, null, null, null)))).emitsExactly(foo_1, foo_2);
+    assertThat(repository.findAll(Example.of(new MessageTo(bar.toString(), null, null, null, null, null)))).emitsExactly(bar_1, bar_2, bar_3);
   }
 
   @Test
   public void findsByExample_user()
   {
-    assertThat(repository.findAll(Example.of(new MessageTo(null, "peter", null, null, null, null)))).containsExactly(foo_1, bar_3);
-    assertThat(repository.findAll(Example.of(new MessageTo(null, "klaus", null, null, null, null)))).containsExactly(bar_1);
-    assertThat(repository.findAll(Example.of(new MessageTo(null, "ute",   null, null, null, null)))).containsExactly(foo_2);
-    assertThat(repository.findAll(Example.of(new MessageTo(null, "beate", null, null, null, null)))).containsExactly(bar_2);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, "peter", null, null, null, null)))).emitsExactly(foo_1, bar_3);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, "klaus", null, null, null, null)))).emitsExactly(bar_1);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, "ute",   null, null, null, null)))).emitsExactly(foo_2);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, "beate", null, null, null, null)))).emitsExactly(bar_2);
   }
 
   @Test
   public void findsByExample_id()
   {
-    assertThat(repository.findAll(Example.of(new MessageTo(null, null, 1l, null, null, null)))).containsExactly(foo_1, bar_1);
-    assertThat(repository.findAll(Example.of(new MessageTo(null, null, 2l, null, null, null)))).containsExactly(foo_2, bar_2);
-    assertThat(repository.findAll(Example.of(new MessageTo(null, null, 3l, null, null, null)))).containsExactly(bar_3);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, null, 1l, null, null, null)))).emitsExactly(foo_1, bar_1);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, null, 2l, null, null, null)))).emitsExactly(foo_2, bar_2);
+    assertThat(repository.findAll(Example.of(new MessageTo(null, null, 3l, null, null, null)))).emitsExactly(bar_3);
   }
 }