Spring Boot
Modul #J8 - Spring Boot
Ziele
- Ich weiss, was Spring-Boot ist und wozu es verwendet wird.
- Ich kenne die Unterschiede zwischen dem Spring-Framework und Spring-Boot.
- Ich kann eine einfache Spring-Boot-Applikation erzeugen (Bootstrap).
- Ich kenne die, am häufigsten verwendeten Spring-Boot Annotationen (z.B.
@SpringBootApplication
,
@EnableAutoConfiguration
) und deren Bedeutung. - Ich weiss, was ein Spring-Boot-Starter ist und kenne die am häufigsten verwendeten
Spring-Boot-Starter (z.B. Web-Starter, Test-Starter usw.) und deren Zweck.
- Ich kann, eine Rest-Schnittstelle mit Spring-Boot erstellen und diese mit Insomnia (o.ä)
ausführen/testen
Spring Boot
Spring Boot ist ein Projekt von Spring, welches dazu gemacht ist, einfacher Spring benutzen
zu können. Es gibt viele Voreinstellungen, die auch nachträglich noch geändert werden können. Es gibt auch
den Spring Initializr, der ein Spring Boot Projekt erstellt.
Dort kann man dann auch weitere Abhängigkeiten und Funktionalitäten hinzufügen.
Spring Boot nimmt uns eigentlich sehr viel Arbeit ab, wenn man damit umzugehen weiß.
Z.B. beherrscht Spring Boot die Autokonfiguration, kann zusätzlich eigenständige Anwendungen
erstellen und vieles mehr. Wir gehen hier aber nur auf die wichtigsten Aspekte ein.
- Autokonfiguration: Autokonfiguration bedeutet, dass deine Anwendungen bereits mit voreingestellten
Abhängigkeiten initialisiert werden. Dies dient hauptsächlich dazu, Zeit zu sparen und blöde Fehler
bei der Konfiguration zu vermeiden. Durch die Autokonfiguration erhältst du ein sofort ausführbares Programm.
- Meinungsansatz: Spring Boot wählt nach eigenem Ermessen Pakete aus und welche
Standardwerte verwendet werden sollen, damit wir das nicht selbst machen müssen. Standard Spring
Boot umfasst über 50 solcher Spring Starter, jedoch gibt es noch viele weitere, die von
Drittanbietern zur Verfügung gestellt werden.
- Eigenständige Anwendungen: Spring Boot kann selbst Anwendungen erstellen, die eigenständig ausgeführt
werden, ohne sich auf einen externen Webserver zu verlassen. Infolgedessen kannst du deine Anwendung
auf jeder Plattform starten, indem du einfach auf ausführen drückst. Falls man eine Anwendung ohne
eingebetteten Webserver erstellen will, kann man diese Funktion einfach deaktivieren.
Nun ist aber die Frage, was ist überhaupt der Unterschied zwischen dem Spring Framework und Spring Boot?
Und was davon ist besser?
Da Spring Boot auf dem Spring Framework aufbaut, gibt es in der Grundstruktur keine grossen
Unterschiede. Einer der grössten Unterschiede ist jedoch, dass Spring Boot sehr viel auf
Komfortfunktionen setzt wie z.B. einen schnellen Projektstart, Starter Pakete und so weiter.
Zudem besitzt Spring Boot noch Funktionen wie z.B. eingebettete Server, um Komplexität zu vermeiden aber auch
automatische Konfigurationen für die Spring Funktionalität.
In der Praxis lohnt sich eine Verwendung von Spring Boot, außer du benötigst eine sehr einzigartige
Konfiguration. Da man mit Boot auch auf das Annotationssystem des Spring Frameworks
zugreifen kann und der Anwendung immer problemlos zusätzliche Abhängigkeiten hinzufügen kann,
wird Boot in den meisten Fällen empfohlen.
Boot Spezifische Annotationen
Für Spring Boot gibt es spezifische Annotationen. Die @SpringBootApplication
konfiguriert eine
Klasse. Die @SpringBootApplication
Annotation ist equivalent
zu @Configuration
, @EnableAutoConfiguration
und @ComponentScan
. Die @EnableAutoConfiguration
Annotation schaltet die automatische Konfiguration ein, was einer der Hauptbestandteile von Spring
Boot ist.
Spring Boot Starter
Wichtig zu erwähnen ist, dass die hier aufgeführten Starter nur ein Bruchteil von allen verfügbaren sind.
Es sind jedoch die wichtigsten und am häufigsten verwendeten Starter.
- Test Starter: Für Testing brauchen wir normalerweise ein Paar der folgenden Erweiterungen:
JUnit, Hamcrest, Mockito oder Spring Test. Diese könnten wir manuell einbinden oder verwenden
den Test Starter der das für uns erledigt.
- Data JPA Starter: Der Data JPA Starter hilft dir, dich effizient mit relationalen
Datenbanken zu verbinden. Intern verwendet der Data JPA Starter die Spring-boot-Jpa-Abhängigkeit.
Jedoch schreiben wir die SQL-Abfragen nicht mehr wie z.b. bei JDBC, denn in der JPA speichern wir
die Daten von Objekten in Tabellen und umgekehrt.
- Mail Starter: Vielleicht wirst du diesen Starter nicht allzu oft verwenden,
jedoch ist es wichtig ihn zu erwähnen, damit du ihn kennst. Der Mail Starter kann hilfreich sein
in der Unternehmensentwicklung, da dort das Senden von E-Mails und der direkte Umgang
mit Java Mail API normalerweise schwierig sein kann. Mail Starter verbirgt diese Komplexitäten.
- Web Starter: Der Spring Boot Web Starter konfiguriert dir automatisch folgende Dinge: Dispatcher,
Servlet, Fehlerseite, Web-JAR’s und Eingebettete Servlet-Behälter. Dies sind alles wichtige
Konfigurationen, wenn du ein Spring Boot Backend für Web aufbauen willst.
Nun schauen wir uns noch kurz an, wie man diese Starter in sein Projekt einbringen würde:
Test Starter:
1
2
3
4
5
| <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
|
Data JPA Starter
1
2
3
4
5
6
7
8
9
| <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
|
Mail Starter
1
2
3
4
| <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
|
Web Starter
1
2
3
4
5
| <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
|
Debuggen von Spring Boot
Spring Boot Code ist in Java geschrieben, dementsprechend bleibt das Debuggen grundsätzlich gleich. Jedoch musst du die Interaktionen zwischen Repositorys, Services und Controllern gut verstehen und wissen, wo du die Breakpoints zu setzen hast. Im Zweifelsfall kann dir die Funktion Step Into behilflich sein.
Jetzt bist du dran. Löse bitte die Aufgaben in den Labs.
Modul #J08 - Spring Boot Testing