Spring Boot Tutorial für Einsteiger

„Hast Du wirklich schon angefangen, Spring auszuprobieren? Ich hab Dich noch gar nicht fluchen gehört!“ Es ist 2015 und mein Büronachbar hätte nicht gedacht, dass meine ersten Schritte mit Spring so reibungslos verlaufen würden.
Ich hatte einen Vortrag von Jürgen Höller, dem Projektleiter des Spring Frameworks besucht. Er gab mir als Anfänger den Tipp, zum Einstieg einfach mal ein Spring Boot Projekt aufzusetzen.
Seit der Veröffentlichung von Spring Boot 2014 setzen viele Projekte auf dieses populäre Framework aus dem Spring-Ökosystem. Während dem „klassischen“ Spring ja noch der Ruf vorauseilte, sehr kompliziert in der Konfiguration zu sein, verspricht Spring Boot einen einfachen Einstieg und schnelle Erfolgserlebnisse. Aber wird dieses Versprechen gehalten?
Eine der revolutionären Neuerungen von Spring Boot war, dass damit erstellte Applikationen ihre Ausführungsumgebung, den Webserver, direkt mitbrachten. Die äußeren Abhängigkeiten sind dadurch minimal und ermöglichen deutlich mehr Flexibilität im Betrieb.
Die ersten Schritte heute
Nach mehr als einem halben Jahrzehnt Spring Boot hat sich auch das Ökosystem weiterentwickelt und bietet nach wie vor sowohl den seichten Einstieg, wie auch die Qualität und Nachhaltigkeit in Produktion.
Für Anfänger empfiehlt es sich heute, ein Projekt über den „Spring Initializr“ unter https://start.spring.io/ zu konfigurieren. Die Default-Einstellungen sind für die ersten Schritte gut geeignet. Lediglich bei der Java Version empfehle ich, mindestens Version 11 zu verwenden (sofern ein entsprechendes JDK auf dem Entwicklungsrechner installiert ist).

Entpackt man das heruntergeladene Archiv, erhält man (neben einer knappen Hilfedatei) zwei wesentliche Projektbestandteile:
- Das Java-Projekt mit dem Ordner src und der Datei pom.xml und
- Hilfsmittel zur lokalen Ausführung bestehend aus dem (versteckten) Ordner .mvn und den Skripten mvnw sowie mvnw.cmd
Los geht‘s!
Ein letzter Check im Terminal (Unix/Mac) oder der Eingabeaufforderung (Windows):
java -version
sollte die Version 11 liefern, ansonsten muss ein entsprechendes JDK installiert werden. Sofern bereits eine lokale Installation vorliegt, reicht eine (temporäre) Anpassung der JAVA_HOME Variablen auf diese Version.
Der Rest ist einfach: Im Hauptverzeichnis (dem Verzeichnis, in dem die Datei pom.xml liegt) führt man nun folgendes in Terminal/Eingabeaufforderung aus:
./mvnw spring-boot:run
unter Unix/Mac bzw.
mvnw.cmd spring-boot:run
auf Windows-Umgebungen.
Zunächst ist (je nach Internetverbindung) mehr oder weniger Geduld gefragt: Bevor das Java Projekt gebaut und gestartet wird, müssen alle benötigten Abhängigkeiten heruntergeladen werden. Dafür verantwortlich ist das Build- und Dependency-Management-Tool maven, das die Bibliotheken herunterlädt, das Projekt kompiliert und startet.
Wenn alles geklappt hat, meldet maven den erfolgreichen Build und Spring Boot den erfolgreichen Start:

Aktuell tut unsere Applikation noch gar nichts, außer zu starten und sich gleich wieder zu beenden. Das reicht aber für den Einstieg und das Vertrautmachen mit den Komponenten aus. Daher verzichten wir an dieser Stelle auf die Anreicherung mit tatsächlicher Logik.
Und nach der Entwicklung?
Natürlich soll eine fertiggestellte Applikation (bzw. ein Microservice innerhalb einer Applikation) nicht bei jedem Start neu kompiliert werden. Nach abgeschlossenen Entwicklungsschritten stellt sich also die Frage, wie die Spring Boot Applikation fertig für die Ausführung gemacht werden kann.
Dazu können wir uns zunächst den Ordner „target“ im Projektverzeichnis ansehen. Dieser wurde von maven beim Starten erstellt und enthält die kompilierten Artefakte. Um eine ausführbare Version zu erhalten, führt man auf der Kommandozeile den folgenden Befehl aus:
./mvnw package
bzw. unter Windows
mvnw.cmd package
Bei der Ausführung des Befehls baut maven das Projekt noch einmal und führt zusätzlich bestehende Unit-Tests durch. Das ist später ein wesentlicher Punkt für die Stabilität des Systems, da der Build sofort unterbrochen wird, wenn auch nur ein Test fehlschlägt.
Im Ordner target findet sich nun eine *.jar Datei, die unabhängig von maven oder sonstigen Hilfsmitteln auf einem beliebigen Java Runtime Environment (JRE) der passenden Version (im Beispiel 11 oder höher) ausgeführt werden kann.
Wichtig: Für die Erstellung, also das lokale Kompilieren des Projekts wird ein Java Development Kit (JDK) benötigt, was im Gegensatz zum JRE eben den Java Compiler mitbringt.
Gepackte Spring Boot Applikation ausführen
Zur Ausführung verwendet man wieder eine Kommandozeile vom Projektordner aus:
java -jar target/springbooteinstieg-0.0.1-SNAPSHOT.jar
Das Projekt fährt wie gewünscht hoch!
Aber warum funktioniert das? Über das Spring Boot Maven Plugin weiß maven, dass eine ausführbare *.jar Datei erstellt werden soll. In dieser Datei (die sich wie ein Zip-Archiv öffnen und entpacken lässt) ist nun alles enthalten, was zur Ausführung der Applikation benötigt wird.
Spring Boot in Produktion
Die Möglichkeiten, Spring Boot nach einem gelungenen Einstieg auch in Produktion zu betreiben sind vielfältig. Als erster Schritt genügt der oben gezeigte Java Befehl auf einem beliebigen Server ausgeführt. Etwas flexibler wird das Konstrukt, wenn die Applikation direkt in ein Container-Image gepackt und damit ausgeliefert wird. Wird das Image nicht direkt auf einem Server abgelegt, sondern in einer Container-Registry, können diverse Orchestrierungsumgebungen wie zum Beispiel Kubernetes ausgenutzt werden.
Die auf Spring Boot optimierte Umgebung Cloud Foundry oder der Anbieter Heroku ermöglichen es, ohne weitere Infrastruktur die Applikation mehr oder weniger ohne Umwege zu betreiben.
Fazit und Ausblick
Der Einstieg in Spring Boot ist einfach! Heute, wie im Jahr 2014. Seit meinen ersten Experimenten als blutiger Anfänger habe ich diverse kleine und große Versionssprünge des Frameworks begleitet. Eines ist bei stetig steigendem Funktionsumfang konstant geblieben: Den Machern von Spring Boot gelingt es mit jeder neuer Version, weitere Vereinfachungen einzuführen. Der Umstieg ist meist eher ein Löschen und Aufräumen.
Das führt, neben schnellen Erfolgserlebnissen für Einsteiger, dazu, dass sich das Framework wirklich uneingeschränkt für den Produktivbetrieb empfehlen lässt. Manchmal kann man scheinbar doch alles haben…
Die ersten Schritte sind geglückt – echte Funktionen haben wir der Demo-Applikation jedoch nicht gegeben. Es gibt also noch Stoff für weitere Artikel an dieser Stelle ;-)

Danke für's lesen.
Julius Mischok ist Geschäftsführer der Mischok GmbH in Augsburg. Seine Kernaufgaben sind Prozessentwicklung, sowie Coaching und Schulung der Entwicklungsteams. Aktuell fokussiert sich seine Arbeit auf die Frage, wie Software schnell und mit einer maximalen Wertschöpfung produziert werden kann. Julius hat Mathematik studiert und entwickelt seit fast zwei Jahrzehnten Java. Seine Erfahrung brachte er unter anderem in Softwareprojekten für BMW, Audi, Hilti, Porsche, Allianz, Bosch, und viele mehr ein.