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.
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.
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.
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.
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.
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.
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.
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.
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?
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.
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.
24. Februar 2022