How to: Mehrere MongoDBs in einem Spring Boot Projekt

Falls mal wieder die Geschwindigkeit eines Zugriffs auf eine fremde Schnittstelle Ärger macht, baut man einen Cache. Dies tat ich auch während der Bearbeitung meiner aktuellen Aufgaben. Da die genutzten Objekte sehr groß und tief verschachtelt waren und eine Abfragelogik vorhanden sein musste, bot sich eine MongoDB als Cache an.

Gesagt getan: Eine einzelne MongoDB zum Testen in ein Spring Boot-Projekt einzubinden ist kein Problem. Doch es mussten mehrere Schnittstellen sauber getrennt gecacht werden, weswegen mehrere MongoDBs an Spring Boot angebunden werden mussten. In diesem Artikel geht es nun um dessen Umsetzung.

Konfiguration über die application.properties
Wie in einem Spring Boot Projekt üblich werden die grundsätzlichen Einstellungen in der application.properties-Datei vorgenommen. Hier stehen die Informationen zu Host, Port und Datenbankname der einzelnen Verbindungen.

Verfügbarkeit der Konfiguration für Spring und Herstellen der Verbindungen
Um diese Informationen für Spring verfügbar zu machen und die Verbindungen herzustellen, werden verschiedene Konfigurationsklassen benötigt. Die erste Klasse, welche sich im nächsten Codeblock befindet, wird von Spring dazu benutzt, die Informationen der application.properties einzulesen. Wichtig ist hier, dass das angegebene Präfix und die Namen der Felder mit denen der application.properties übereinstimmen.

Die zweite Klasse stellt Spring die Beans zur Verfügung, welche den Datenbankzugriff übernehmen. Sie befindet sich im nächsten Codeblock.

Die letzten beiden Klassen stellen die Verbindung zwischen den einzelnen Repositories und den dazugehörigen Konfigurationen her. Hier ist darauf zu achten, dass die angegebenen Template-Namen mit denen der Beans übereinstimmen und die Paket-Pfade richtig gesetzt werden. Die Klassen befinden sich in den nächsten beiden Codeblöcken.

Nutzen der unterschiedlichen Verbindungen
Wenn man die unterschiedlichen Verbindungen nutzen möchte, benötigt man noch Repositories für den Zugriff auf die Datenbank. Diese werden auf die selbe Art erzeugt, wie bei einer einzelnen Datenbankanbindung. Zu beachten ist hier, dass jedes Repository in dem Paket liegt, welches für die Datenbank angegeben wurde. Ein mehrfaches Nutzen von einem Repository für mehrere Datenbanken ist nicht möglich, das Modell kann aber wiederverwendet werden. Wenn das Datenmodell und die Zugriffe für beide Datenbanken gleich sein sollten, so empfiehlt es sich eine Vererbungshierarchie über die Repositories aufzubauen. 2 Beispiele befinden sich in den nächsten beiden Codeblöcken und die benötigte Modell-Klasse folgt im Codeblock darauf.

Beispiel
Nun haben wir alle Komponenten zusammen. Damit sind 2 MongoDBs an unser Spring Boot-Projekt angebunden. Zum Abschluss noch ein Beispiel, wie diese Verbindungen genutzt werden könnten:

Man kann erkennen, dass alle Zugriffe auf das PrimaryBookRepository entsprechend auf die primäre Datenbank und die Zugriffe auf das SecondaryBookRepository auf die sekundäre Datenbank geleitet werden. Somit wurden 2 Datenbanken in das Projekt integriert. Nach demselben Prinzip können auch mehr als 2 Datenbanken angebunden werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.