E-Book, Deutsch, 1046 Seiten
Reihe: Rheinwerk Computing
Ullenboom Spring Boot 3 und Spring Framework 6
2. Auflage 2025
ISBN: 978-3-367-10423-9
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das umfassende Handbuch
E-Book, Deutsch, 1046 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-10423-9
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Enterprise-Anwendungen mit Java, ohne Ballast und voll auf der Höhe der Zeit? Willkommen in der Welt von Spring und Spring Boot! Christian Ullenboom zeigt Ihnen in diesem umfassenden Handbuch, was Sie über das Framework wissen sollten - zum Lernen und zum Nachschlagen. Unabhängig davon, ob Sie für die Cloud oder On Premises entwickeln, mit welcher Architektur und wie groß Ihre Projekte sind: Mit dem richtigen Know-how im Rücken sind Sie bereit für professionelle und moderne Softwareentwicklung mit Spring und Java.
Aus dem Inhalt:
- Das erste Projekt aufsetzen
- Spring Core Container
- Dependency Injection und Inversion of Control
- Testgetriebene Entwicklung mit Spring Boot
- Caching
- Java Persistency Query Language
- Spring Data
- RESTful Webservices
- OpenAPI-Dokumentation
- Spring Security
- Monitoring
- Logging
- Deployment
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 23 1. Einleitung ... 33 1.1 ... Einleitung und ein erstes Spring-Projekt ... 33 1.2 ... Dependencies und Starter eines Spring-Boot-Projekts ... 54 1.3 ... Einstieg in die Konfigurationen und das Logging ... 62 2. Container für Spring-managed Beans ... 67 2.1 ... Spring-Container ... 67 2.2 ... Design und Strukturierung einer Anwendung ... 75 2.3 ... Spring-managed Beans durch Classpath-Scanning aufnehmen ... 81 2.4 ... Interaktive Anwendungen mit der Spring Shell ... 95 2.5 ... Die Verweisspritze ... 101 2.6 ... Konfigurationsklassen und Fabrikmethoden ... 119 2.7 ... Abstraktion und Qualifizierungen ... 137 2.8 ... Lebenszyklus der Beans ... 158 2.9 ... Annotationen aus JSR 330, »Dependency Injection for Java« * ... 183 2.10 ... Autokonfiguration ... 185 2.11 ... Spring Expression Language (SpEL) ... 200 3. Ausgewählte Module des Spring Frameworks ... 207 3.1 ... Hilfsklassen im Spring Framework ... 207 3.2 ... Externe Konfiguration und das Environment ... 208 3.3 ... Am Anfang und Ende ... 258 3.4 ... Ereignisbehandlung ... 268 3.5 ... Ressourcen-Abstraktion mit Resource ... 283 3.6 ... Typkonvertierung mit ConversionService ... 288 3.7 ... Internationalisierung * ... 306 3.8 ... Testgetriebene Entwicklung mit Spring Boot ... 312 3.9 ... Scheibchen testen am Beispiel von JSON * ... 340 3.10 ... Scheduling * ... 352 3.11 ... Typen aus org.springframework.*.[lang|util] ... 356 4. Ausgewählte Proxies ... 365 4.1 ... Proxy-Pattern ... 366 4.2 ... Caching ... 372 4.3 ... Asynchrone Aufrufe ... 392 4.4 ... TaskExecutor * ... 400 4.5 ... Spring und Bean Validation ... 406 4.6 ... Spring Retry * ... 417 5. Relationale Datenbanken anbinden ... 427 5.1 ... Eine H2-Datenbank aufsetzen ... 427 5.2 ... Datenbankzugriffe mit Spring realisieren ... 436 5.3 ... Der Spring Boot Starter JDBC ... 438 5.4 ... JdbcTemplate ... 451 5.5 ... Datentypen zum Mapping auf Ergebnisse ... 457 5.6 ... NamedParameterJdbcTemplate ... 468 5.7 ... Batch-Operationen * ... 474 5.8 ... Es wird groß mit BLOB und CLOB * ... 483 5.9 ... Das Paket org.springframework.jdbc.core.simple * ... 487 5.10 ... Das Paket org.springframework.jdbc.object * ... 494 5.11 ... Transaktionen ... 497 6. Jakarta Persistence mit Spring ... 511 6.1 ... Welt der Objekte und der Datenbanken ... 511 6.2 ... Jakarta Persistence ... 517 6.3 ... Spring Data JPA ... 520 6.4 ... Die Jakarta-Persistence-Entity-Bean ... 523 6.5 ... Die Jakarta Persistence API ... 531 6.6 ... Die Jakarta Persistence Query Language (JPQL) ... 537 6.7 ... Datenbankfunktionen aufrufen und native SQL-Anfragen senden ... 560 6.8 ... Schreibender Zugriff mit dem EntityManager in Transaktionen ... 567 6.9 ... Persistence Context und weitere Transaktionssteuerungen ... 574 6.10 ... Weiterführende OR-Metadaten ... 579 6.11 ... Beziehungen zwischen Entitäten ... 600 6.12 ... FetchType: Lazy und Eager Loading ... 613 6.13 ... Cascading ... 619 6.14 ... Repositories ... 624 7. Spring Data JPA ... 635 7.1 ... Welche Aufgaben erfüllt Spring Data? ... 635 7.2 ... Spring Data Commons: CrudRepository ... 637 7.3 ... Untertypen von CrudRepository: JpaRepository etc. ... 642 7.4 ... Blättern und Sortieren mit [List]PagingAndSortingRepository ... 647 7.5 ... QueryByExampleExecutor * ... 658 7.6 ... Eigene Abfragen mit @Query formulieren ... 664 7.7 ... Stored Procedures (gespeicherte Prozeduren) * ... 675 7.8 ... Derived Query Methods ... 679 7.9 ... Die Criteria API und der JpaSpecificationExecutor ... 686 7.10 ... Alternativen zu JDBC Jakarta Persistence ... 698 7.11 ... Gutes Design mit Repositories ... 712 7.12 ... Projektionen ... 717 7.13 ... [Fetchable]FluentQuery * ... 723 7.14 ... Auditing * ... 725 7.15 ... Incremental Data Migration ... 729 7.16 ... Die Datenzugriffsschicht testen ... 736 8. Spring Data für NoSQL-Datenbanken ... 749 8.1 ... Not only SQL ... 749 8.2 ... MongoDB ... 750 8.3 ... Elasticsearch ... 764 9. Spring Web ... 777 9.1 ... Webserver ... 777 9.2 ... Dynamische Inhalte generieren ... 784 9.3 ... Spring Web MVC ... 789 9.4 ... Hot Code Swapping ... 796 9.5 ... Das Hypertext Transfer Protocol (HTTP) ... 797 9.6 ... Request Matching ... 800 9.7 ... Response senden ... 803 9.8 ... Request auswerten ... 815 9.9 ... Typkonvertierung der Parameter ... 841 9.10 ... Ausnahmebehandlung und Fehlermeldung ... 850 9.11 ... Webservices und RESTful API ... 865 9.12 ... GraphQL ... 868 9.13 ... Asynchrone Web-Requests * ... 897 9.14 ... Spring Data Web Support ... 901 9.15 ... Dokumentation einer RESTful API mit OpenAPI ... 908 9.16 ... Testen der Webschicht ... 919 9.17 ... Best Practices bei der Nutzung einer RESTful API ... 928 9.18 ... Webanwendungen mit Spring Security absichern ... 934 9.19 ... RESTful Webservices konsumieren ... 964
10. Spring AI ... 983 10.1 ... Was ist künstliche Intelligenz? ... 983 10.2 ... Ollama ... 985 10.3 ... Spring AI nutzen ... 987 10.4 ... Prompt aufbauen ... 990 10.5 ... Ausblick ... 993
11. Logging und Monitoring ... 995 11.1 ... Logging ... 995 11.2 ... Logging-Implementierung ... 996 11.3 ... Anwendungen mit dem Spring Boot Actuator überwachen ... 1004 11.4 ... Micrometer und Prometheus ... 1013
12. Build und Deployment ... 1021 12.1 ... Spring-Boot-Programme verpacken und ausführen ... 1021 12.2 ... Spring-Anwendungen im OCI-Container ... 1024 Index ... 1037
Vorwort
Was ist Spring Boot?
Spring Boot ist aktuell das wichtigste Java-Enterprise-Framework und bietet der Entwicklergemeinschaft viele Vorteile: Es ist leicht zu lernen und zu verwenden und erleichtert die Entwicklung von Microservices. Richtig entwickelt, sind Spring-Boot-Anwendungen skalierbar und eignen sich daher perfekt für robuste Unternehmensanwendungen.
Vorkenntnisse und Zielgruppe
Spring ist ein sehr beliebtes Framework in der Java-Community und hat sich in den vergangenen Jahren zu einem Quasistandard entwickelt. Daher wurde dieses Buch für alle konzipiert, die Unternehmensanwendungen mit Datenbankanbindung und Webservices entwickeln möchten. Es ist sowohl für Anfänger als auch für Fortgeschrittene geeignet und liefert zahlreiche praktische Beispiele.
Voraussetzung sind robuste Java-Kenntnisse und der sichere Umgang mit Werkzeugen wie Maven. Mit relationalen Datenbanken sollte die Leserschaft grundlegend vertraut sein.
Die Demoanwendung Date4u, Aufgaben und Lösungen
Mit diesem Handbuch und einer Entwicklungsumgebung des Vertrauens lassen sich Spring-Programme entwickeln. Um ein neues Framework zu erlernen, reicht das Lesen aber nicht aus. Wer eine Programmiersprache oder ein Framework erlernen möchte, muss sie bzw. es wie eine Fremdsprache üben und »sprechen«, und neben der Grammatik der Sprache ist Spring das Vokabular.
Zur Demonstration wird in diesem Buch eine Dating-Anwendung für Einhörner implementiert. Dieses unterhaltsame Beispiel demonstriert alle zentralen Bestandteile einer Enterprise-Anwendung: das Zusammenspiel von Komponenten, die Speicherung der Profildaten in einer Datenbank und den Zugriff über Webservices. Die Leserschaft wird Schritt für Schritt durch die Anwendung geleitet, und im Text eingestreut finden sich immer wieder Aufgaben, die zur Übung einladen. Zu jeder Aufgabe folgt ein Lösungsvorschlag, sodass sich der Text linear lesen lässt. Die Anwendung Date4u ist per Download verfügbar (siehe https://rheinwerk-verlag.de/5980).
Organisation der Kapitel
Das Buch gliedert sich in folgende Kapitel:
Kapitel 1, »Einleitung«, stellt das Spring Framework und die »Erweiterung« Spring Boot vor. Es wird gezeigt, wie ein Projekt angelegt wird. Außerdem werden der Aufbau der Maven-POM-Datei sowie die Bedeutung der Starter und Dependencies erläutert.
In Kapitel 2, »Container für Spring-managed Beans«, steht der Spring-Kontext im Mittelpunkt. Schritt für Schritt wird aus einer einzigen Klasse ein Geflecht von Spring-managed Beans aufgebaut, um Bilder im Dateisystem abzulegen und zu laden.
Die Verwaltung von Spring-managed Beans ist eine Kernaufgabe des Spring Frameworks, aber es gibt viele weitere Features, die Kapitel 3, »Ausgewählte Module des Spring Frameworks«, anspricht. Dazu zählen die externe Konfiguration, die Ereignisbehandlung, Konvertierungsklassen und diverse Utility-Klassen.
In Kapitel 4, »Ausgewählte Proxies«, geht es mit besonderen »Ringen« weiter, die sich um Komponenten legen und damit das Caching, asynchrone Aufrufe oder die Validierung übernehmen. Das bietet den Vorteil, dass bestimmte Aufgaben an das Framework verlagert werden können, sodass der eigene Code schlanker wird.
In den ersten vier Kapiteln stehen der Spring-Container und Hilfsklassen im Mittelpunkt, aber keine Speichertechnologien. Das ändert sich in Kapitel 5, »Relationale Datenbanken anbinden«. In diesem Kapitel wird ein Datenbankmanagementsystem vorbereitet und werden SQL-Anfragen an die Datenbank demonstriert.
Das Schreiben in Datenbanken mit der JDBC-API ist einfach und direkt, aber unkomfortabel. Daher führt Kapitel 6, »Jakarta Persistence mit Spring«, in das objektrelationale Mapping ein.
Datenzugriffsschichten sind in jeder größeren Anwendung nötig. Kapitel 7, »Spring Data JPA«, stellt ihre Möglichkeiten exemplarisch an dem Familienmitglied Spring Data JPA vor. Repositories lassen sich damit einfach schreiben, und viele Abfragen und Datentransformationen werden vom Framework realisiert.
Relationale Datenbanken werden flankiert von nichtrelationalen Datenbanksystemen, die ebenfalls ausgezeichnet in die Spring-Data-Familie integriert sind. Kapitel 8, »Spring Data für NoSQL-Datenbanken«, zeigt anhand von MongoDB und Elasticsearch, wie die Spring-Data-Konzepte in die NoSQL-Welt übertragen werden.
Nachdem mit der Datenhaltung ein wichtiger Teil der Infrastruktur beschrieben wurde, geht es mit Anwendungen des HTTP-Protokolls in Kapitel 9, »Spring Web«, weiter. Dort stehen RESTful Webservices und HTTP-Clients im Mittelpunkt.
Das Kapitel 10, »Spring AI«, bietet einen Einblick in die neue API zur Nutzung von Large Language Models.
Mit dem bisher erworbenen Wissen lässt sich eine Anwendung betreiben, aber es ist wichtig, auch von außen in die Anwendung schauen zu können, um zu prüfen, ob die »Betriebstemperatur« stimmt. Kapitel 11, »Logging und Monitoring«, stellt mit dem Actuator-Projekt eine Möglichkeit vor, Daten einer Anwendung freizugeben, die dann von externen Lösungen abgeholt und visualisiert werden können.
Dass ein Programm in der Entwicklungsumgebung läuft und bei den Testfällen nicht versagt, ist gut, aber nur die halbe Miete: Ein Programm muss ausgespielt werden. Dazu stellt Kapitel 12, »Build und Deployment«, unter anderem OCI-Container (aka Docker) vor.
Die *-Abschnitte
Das Spring-Universum ist reich an Feinheiten und verwirrt Einsteiger und Einsteigerinnen oft. Um das nötige Wissen vom verzichtbaren Wissen zu trennen, enden einige Überschriften mit einem *, was bedeutet, dass dieser Abschnitt übersprungen werden kann, ohne dass der Leserschaft etwas Wesentliches für die späteren Kapitel fehlt.
Welche Java-Version wird im Buch genutzt?
Die Mindestanforderung für die Nutzung von Spring Boot 3 ist Java 17. Da Java 21 jedoch die neueste Long-Term-Support-(LTS-)Version darstellt – was bedeutet, dass Laufzeitumgebungen von den Herstellern über viele Jahre hinweg mit Updates und Support versorgt werden –. basiert das Buch auf Java 21. Spring Boot 3 ist auch mit aktuelleren Java-Versionen wie Java 23 kompatibel.
Benötigte Software
Wollen wir Java-Programme laufen lassen, benötigen wir eine JVM. In der Anfangszeit war das einfach. Die Laufzeitumgebung stammte erst von Sun Microsystems, später von der Firma Oracle, die Sun übernommen hat. Heute ist das deutlich unübersichtlicher. Diverse Institutionen kompilieren das OpenJDK (die Originalquellen enthalten Hunderttausende Zeilen C[++]- und Java-Quellcode) und bündeln es in eine Distribution, die Java-Laufzeitumgebung. Die bekanntesten Laufzeitumgebungen sind:
-
Eclipse Adoptium (https://adoptium.net),
-
Amazon Corretto (https://aws.amazon.com/de/corretto),
-
Red Hat OpenJDK (https://developers.redhat.com/products/openjdk/overview)
Hinzu kommen weitere, wie die von Azul Systems oder Bellsoft. Zum Lernen mit diesem Buch kann man sich frei für eine Distribution entscheiden; mit Adoptium liegt man gut.
Die Entwicklungsumgebung
Java-Quellcode ist nur Text, sodass im Prinzip ein einfacher Texteditor reicht. Allerdings können wir mit einem Editor wie Notepad keine große Produktivität erwarten. Moderne Entwicklungsumgebungen unterstützen uns in vielerlei Hinsicht: durch farbige Hervorhebung von Schlüsselwörtern, automatische Codevervollständigung, intelligente Fehlerkorrektur, durch das Einfügen von Codeblöcken, die Visualisierung von Zuständen im Debugger und durch vieles mehr. Es ist daher ratsam, eine vollständige Entwicklungsumgebung zu verwenden. Drei populäre IDEs sind: IntelliJ, Eclipse und Visual Studio Code. Hingegen verliert (Apache) NetBeans immer weiter den Anschluss.
Wie bei den Java-Laufzeitumgebungen ist es jedem und jeder überlassen, sich eine Entwicklungsumgebung auszuwählen. Eclipse, NetBeans und Visual Studio Code sind frei und quelloffen. Die IntelliJ Community Edition ist ebenfalls frei und quelloffen, die mächtigere IntelliJ Ultimate Edition kostet hingegen Geld. Die Ultimate-Version der IntelliJ ist sicherlich die...