Frühling

Optimierung der Annotation @SpringBootTest (feat. @DataJpaTest, @WebMvcTest)

Als ich in meinem neuen Job anfing, machte ich mir Gedanken darüber, dass die Testzeiten sehr lang waren (ungefähr 28 Minuten). Nebenbei bemerkt, meine Teamkollegen empfanden diese Zeit nicht als besonders lang, da sie es gewohnt waren. In meinem vorherigen Unternehmen dauerten die Tests jedoch nur 2-3 Minuten, was die längeren Zeiten für mich sehr schwer zu ertragen machte. 🤣 Damals benutzten wir kein Tool wie Testcontainers, um Container zu starten, sondern ausschließlich Unit-Tests auf Mockito-Basis. Ich konnte nicht nachvollziehen, warum die Tests so viel Zeit in Anspruch nahmen.

Mehr lesen →

20. Januar 2025

Redis Cache in Spring Boot anwenden

Obwohl es schon eine Weile her ist, habe ich einmal API-Lasttests mit einem Tool namens Locust durchgeführt. Um die Verzögerung einer bestimmten API-Antwort zu lösen, habe ich Redis Cache angewendet und möchte diese Erfahrung teilen. Was ist ein Cache? Ein Cache ist ein Speicherbereich, der Daten oder Werte vorab speichert, damit man schneller darauf zugreifen kann. Grundsätzlich wird zwar auf RDBs, die auf der Festplatte gespeichert sind, zugegriffen, aber im Vergleich zu Redis, das im Speicher gespeichert ist, kann man Daten mit hoher Geschwindigkeit abrufen.

Mehr lesen →

19. Januar 2025

Testen von QueryDSL in Spring mit Testcontainers

In der Praxis ist es manchmal schwierig zu wissen, ob eine QueryDSL-Abfrage korrekt funktioniert. Hierbei kann Testcontainers helfen, indem es eine Containerumgebung bereitstellt, in der die Datenbank so wie in der Echtumgebung ausgeführt wird. Dadurch können die Abfragen getestet und die Ergebnisse verglichen werden. Warum QueryDSL testen? Das Ausführen von Abfragen in der Datenbank ist nicht nur mit QueryDSL, sondern auch mit anderen ORM-Frameworks wie JPA oder MyBatis möglich.

Mehr lesen →

19. August 2024

Erkundung der Unterschiede zwischen den Spring-Anmerkungen @Configuration und @Component

Es gibt grundsätzlich zwei Möglichkeiten, wie man in Spring Abhängigkeiten (auch Bean-Klassen genannt) registrieren kann: @Configuration und @Component, die wir im Folgenden erläutern werden. Ein Bean ist, wie in einem früheren Beitrag erklärt, ein Objekt, das vom Spring IoC-Container verwaltet wird. @Configuration und @Component sind Möglichkeiten, genau diese Beans zu registrieren. Lassen Sie uns die Unterschiede zwischen diesen beiden Anmerkungen erkunden. Verwendung von @Component @Component ist eine der Möglichkeiten, um Beans im Spring IoC-Container zu registrieren.

Mehr lesen →

9. Juli 2024

Trace ID und Span ID Logging mit Micrometer in Spring

Beim Debugging durch Logging kann es vor allem in verteilten Systemen schwierig sein, den Fluss der Transaktionen zu erkennen. Besonders in Produktionsumgebungen wird oft in mehreren Stufen geloggt, um Parameter normaler Anfragen oder Rückgabewerte zur Fehlersuche zu speichern. Das Problem solcher Logs ist, dass sie bei mehreren gleichzeitigen Anfragen durcheinander geraten können, was es schwer macht, die Logs einzelnen Anfragen zuzuordnen. Zudem kann es schwierig sein, die Logs der Anfragen zu identifizieren, bei denen Fehler aufgetreten sind.

Mehr lesen →

24. Juni 2024

Ausgabe von Pattern-Logs und JSON-Logs mit Logback in Spring Boot

Beim Betrieb eines API-Servers kommt es häufig vor, dass man Protokolle für Betriebsvorgänge oder zur Fehlersuche erstellt. Traditionell gibt es beim Erstellen von Logs in Spring zwar ein Format, aber oft werden sie in Rohtextform hinterlassen. In solchen Fällen halte ich es für besser, die Logs im Rohtext zu hinterlassen, da sie sichtbarer sind als im JSON-Format. Allerdings sieht es beim Suchen und Filtern von Logs anders aus. Bei Plattformen wie AWS CloudWatch, die Log-Suchfunktionen bieten, ist es schwierig, herauszufinden, welche Funktion welche Daten ausgibt, wenn in Rohtext protokolliert wird.

Mehr lesen →

17. Juni 2024

(JAVA) Mocking von statischen Methoden innerhalb eines Dienstes in Spring

In der Regel folgt Spring einer Schichten-Architektur, wobei der Service hauptsächlich die Geschäftslogik verarbeitet. Es gibt jedoch Fälle, in denen man static-Methoden verwendet. Da bei gewöhnlichen Komponenten zur Laufzeit dynamisch gebunden wird, kann das entsprechende Interface während des Mocking-Prozesses durch ein Mock-Objekt ersetzt und getestet werden. static-Methoden hingegen sind zur Compile-Zeit statisch gebunden, was das Mocking erschwert. Was kann man also tun? 1. Wrapper-Klasse Traditionell kann man statische Methoden in Komponenten umwandeln.

Mehr lesen →

15. Juni 2024

(JAVA) Mocking einer Methode innerhalb desselben Service in Spring

In der Regel folgt Spring einer Schichtarchitektur, wobei die Geschäftslogik hauptsächlich im Service behandelt wird. Je mehr Code im Service vorhanden ist, desto mehr ähnlicher Code gibt es. In solchen Fällen kann es sinnvoll sein, eine separate Schicht für gemeinsame Logik hinzuzufügen, aber oft wird die gemeinsame Methode im Service selbst deklariert und verwendet. Sehen wir uns folgendes Beispiel an: @Service public class SomeService { public void methodA() { // do something } public void methodB() { methodA(); // do something } public void methodC() { methodA(); // do something } } In dem obigen Code ist methodA eine Methode, die sowohl in methodB als auch in methodC verwendet wird.

Mehr lesen →

30. Mai 2024

Einführung in Spring Beans

Heute dachte ich daran, über Spring MVC zu sprechen. Bevor wir jedoch in das MVC-Konzept einsteigen, möchte ich einige grundlegende Kenntnisse über Spring erläutern, die für das Verständnis des MVC unerlässlich sind. Was ist ein Spring Bean? Ein Spring Bean bezeichnet ein Objekt, das vom Spring Container verwaltet wird. Aber halt, was bedeutet das genau? Ein Objekt, das von Spring verwaltet wird? Handelt es sich hierbei um ein Objekt, das in der Bibliothek von Spring definiert ist?

Mehr lesen →

24. Februar 2022

Erfahren wir mehr über die Autowired-Annotation

Beim letzten Mal haben wir uns mit DI in Spring beschäftigt. “Gehe zum Beitrag über Dependency Injection” Heute wollen wir uns mit der Annotation @Autowired befassen, die eng mit DI verbunden ist. Zunächst einmal ist der Name einer Methode oder Annotation sehr wichtig. Autowired? Was kommt einem in den Sinn? “Automatisch verbunden”, oder? Was auch immer das bedeutet, schauen wir es uns an. @Autowired? Dieser Freund, der “automatisch verbunden” bedeutet, ist dafür verantwortlich, Abhängigkeiten in Spring zu injizieren. Man könnte sagen, dass er das Konzept der Dependency Injection tatsächlich umsetzt.

Mehr lesen →

24. Februar 2022

Lass uns über Dependency Injection (DI) sprechen

In diesem Beitrag werden wir uns mit dem Konzept der Dependency Injection (DI) beschäftigen, einem der wichtigsten Konzepte im Spring Framework. DI ist eines der entscheidenden Konzepte von Spring und kommt auch in Vorstellungsgesprächen häufig vor, daher ist es gut, es zu kennen. Zuerst wollen wir uns mit der Abhängigkeit beschäftigen. Abhängigkeit Wenn das Objekt A vom Objekt B abhängig ist, hat es eine enge Beziehung zur Komposition.

Mehr lesen →

24. Februar 2022