Integrationstests mit Spring Data MongoDB und Testcontainers

Bis vor kurzem haben wir auf Arbeit eine Embedded MongoDB zum Testen unserer Spring Boot Anwendungen verwendet. Mittlerweile benötigen wir jedoch ein paar Features, die seit MongoDB 4 hinzugekommen sind, und die Embedded MongoDB unterstützt bis jetzt nur MongoDB 3. Daran wird sich vermutlich auch in Zukunft nichts ändern (Is this project dead? #314), sodass ich mich auf die Suche nach einer Alternative gemacht habe.

Caching für WebJars in Spring Boot konfigurieren

Für einfache Spring Boot basierte Webanwendungen greife ich häufig auf WebJars zurück. WebJars bieten die Möglichkeit, diverse JavaScript und CSS Bibliotheken wie z.B. jQuery oder Bootstrap als Abhängigkeit in Form einer JAR-Datei einzubinden. Spring Boot unterstützt WebJars von Haus aus, allerdings sollte das Caching für die WebJar Ressourcen konfiguriert werden, um möglichst kurze Ladezeiten für den Client zu erreichen.

Docker Images mit Google Jib bauen

Bislang habe ich Docker Images für meine Spring Boot Anwendungen immer per Dockerfile gebaut. Dafür wurde die mit dem spring-boot-maven-plugin erzeugte JAR Datei einfach in ein Docker Image kopiert. Dieses Vorgehen hat jedoch einige Nachteile, die nur mit viel Aufwand gelöst werden können. Stattdessen empfehle ich seit einiger Zeit die Verwendung von Google Jib, das eure Java Anwendungen effizient und sicher als Docker Image verpackt.

Bean Validation mit Spring nutzen

Der ModelAttributeMethodProcessor von Spring MVC erlaubt standardmäßig die Überprüfung von Methodenparametern in @Controller-Klassen per Bean Validation. Um diese Funktionalität auch in anderen Spring Beans (die z.B. mit @Service oder @Component annotiert sind) verwenden zu können, sind nur wenige Handgriffe nötig.

Mehrere Datenbanken mit Spring Boot und Spring JDBC anbinden

Ohne manuelle Konfiguration kann nur eine Datenbank mit Spring Boot genutzt werden. Soll eine Anwendung mehrere Datenbanken anbinden, ist hingegen etwas Handarbeit nötig. Dieser Artikel zeigt die dazu notwendige Konfiguration unter Verwendung von Spring Boot 2, Spring JDBC und zwei MySQL Datenbanken.

Build und Git Informationen mit Spring Boot erzeugen und auslesen

Mit Spring Boot können bequem Build und Git Informationen erzeugt und ausgelesen werden. Damit die Informationen erzeugt werden, muss die Konfiguration zunächst entsprechend angepasst werden.

Plugin Schnittstelle mit dem Java ServiceLoader umsetzen

Viele moderne Anwendungen verfügen heutzutage über Plugin Schnittstellen. Solche Schnittstellen ermöglichen es, die jeweilige Anwendungen zu erweitern, ohne die Hauptanwendungen selbst anzupassen. Java bringt standardmäßig den ServiceLoader mit, um solche Plugin Schnittstellen umzusetzen.

25. August 2017 Java

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!

Diese oder eine sehr ähnliche Warnung wird ausgegeben, wenn in einem Maven Projekt nicht explizit die Zeichenkodierung des Quellcodes angegeben wird. In diesem Fall wird ein Betriebssystem-spezifischer Standard verwendet, was in einigen Fällen zu Problemen führen kann. Deshalb sollte die Zeichenkodierung des Projektes immer angegeben werden.

14. August 2017 Java Maven

Apache Derby Datenbank in Java Anwendung einbinden

Apache Derby ist eine in Java implementierte SQL Datenbank, die entweder eigenständig gestartet oder direkt in eine Java Anwendung eingebunden werden kann. Dieser Artikel zeigt, wie die Datenbank in eine Java Anwendung integriert und angesprochen werden kann.

04. August 2017 Apache Derby Java

Shutdown Hooks beim Beenden einer Java Anwendung ausführen

Das ungeplante Beenden einer Anwendung, z.B. durch drücken von STRG + C auf der Konsole oder Abbruchsignale, kann Probleme nach sich ziehen, wenn Ressourcen nicht mehr freigegeben oder inkonsistente Zustände hinterlassen werden. Glücklicherweise kann auf das ungeplante Beenden der JVM per Shutdown Hook reagiert werden.

02. August 2017 Java