Zum Hauptinhalt springen

Woche 3 — Review: Spring Boot Auto-Konfiguration, Actuator und Startup

Ziel

Dieses Review prüft, ob du Woche 3 wirklich verstanden hast.

Themen aus Woche 3:

  1. Spring Boot Mental Model
  2. @SpringBootApplication
  3. @Configuration
  4. @EnableAutoConfiguration
  5. @ComponentScan
  6. Spring Boot starters
  7. Dependency management
  8. Auto-Konfiguration
  9. Conditions
  10. Back-off
  11. Actuator
  12. Health endpoint
  13. Metrics endpoint
  14. Beans endpoint
  15. Conditions endpoint
  16. Application startup
  17. SpringApplication.run
  18. CommandLineRunner
  19. ApplicationRunner
  20. Application events
  21. Lazy initialization
  22. Startup debugging

1. Das große Bild aus Woche 3

Woche 1 hat beantwortet:


Wie erzeugt Spring Objekte und verbindet sie?

Woche 2 hat beantwortet:


Wie konfiguriert, aktiviert, scoped, initialisiert und zerstört Spring diese Beans?

Woche 3 beantwortet:


Wie macht Spring Boot Spring-Anwendungen einfacher zu konfigurieren, zu starten, zu überwachen und zu debuggen?

Spring Boot ergänzt:


starter dependencies
auto-configuration
embedded server
external configuration conventions
Actuator
startup runners
application events
production-ready monitoring
debugging tools

Merksatz:


Spring Framework ist das Fundament.
Spring Boot macht Spring einfacher zu konfigurieren, zu starten, zu überwachen und zu deployen.

2. Zentrale Merksätze

Auswendig lernen:


Spring Boot baut auf dem Spring Framework auf.

Spring Framework liefert IoC, DI, AOP, MVC, Transactions und Bean Lifecycle.

Spring Boot ergänzt starters, auto-configuration, embedded server support, external configuration conventions und Actuator.

@SpringBootApplication enthält @Configuration, @EnableAutoConfiguration und @ComponentScan.

@Configuration erlaubt Bean-Definitionen.

@ComponentScan findet deine Application Components.

@EnableAutoConfiguration aktiviert Spring Boot auto-configuration.

Starters bringen Dependencies.

Auto-configuration konfiguriert Beans basierend auf Dependencies und Conditions.

Starter legt Libraries auf den Classpath.

Auto-configuration sieht diese Libraries und konfiguriert sie.

Spring Boot dependency management liefert kompatible Dependency-Versionen.

Normalerweise gibst du für Boot-verwaltete Dependencies keine Versionen manuell an.

Auto-configuration ist conditional.

@ConditionalOnClass prüft, ob eine Klasse auf dem Classpath existiert.

@ConditionalOnMissingBean erzeugt eine Bean nur, wenn noch keine passende Bean existiert.

Back-off heißt: Boot erzeugt seinen Default nicht, weil du deine eigene Bean bereitgestellt hast.

@ConditionalOnProperty erzeugt Konfiguration basierend auf Property-Werten.

Component scanning findet deine Klassen.

Auto-configuration wendet Boot-Konfigurationsklassen an.

Actuator liefert production-ready Monitoring- und Management-Endpoints.

Der Standard-Actuator-Basispfad ist /actuator.

Standardmäßig sind nur wenige Endpoints über HTTP exposed.

Exponiere sensible Actuator-Endpoints nicht öffentlich.

Health zeigt App-Health.

Metrics zeigt Runtime-Messwerte.

Beans zeigt registrierte Spring Beans.

Conditions zeigt Auto-Konfigurationsentscheidungen.

Configprops zeigt configuration properties.

SpringApplication.run startet die Spring Boot-Anwendung.

CommandLineRunner bekommt rohe String-Args.

ApplicationRunner bekommt geparste ApplicationArguments.

Runners laufen nach dem Start des Application Context.

ApplicationReadyEvent kommt nach den Runners.

Lazy initialization erzeugt Beans erst, wenn sie zum ersten Mal gebraucht werden.

Lazy initialization kann den Startup verbessern, aber Fehler verzögern.

3. Concept Map


Spring Boot

├── Main Application
│ ├── @SpringBootApplication
│ ├── @Configuration
│ ├── @EnableAutoConfiguration
│ └── @ComponentScan

├── Starters
│ ├── spring-boot-starter-web
│ ├── spring-boot-starter-data-jpa
│ ├── spring-boot-starter-security
│ ├── spring-boot-starter-validation
│ ├── spring-boot-starter-actuator
│ └── spring-boot-starter-test

├── Dependency Management
│ ├── parent POM
│ ├── BOM
│ ├── managed versions
│ └── transitive dependencies

├── Auto-Configuration
│ ├── @ConditionalOnClass
│ ├── @ConditionalOnMissingBean
│ ├── @ConditionalOnBean
│ ├── @ConditionalOnProperty
│ ├── @ConditionalOnWebApplication
│ └── back-off

├── Actuator
│ ├── health
│ ├── info
│ ├── metrics
│ ├── beans
│ ├── conditions
│ ├── configprops
│ ├── env
│ └── loggers

└── Startup
├── SpringApplication.run
├── ApplicationContext refresh
├── CommandLineRunner
├── ApplicationRunner
├── ApplicationReadyEvent
├── ApplicationFailedEvent
└── lazy initialization

4. Wichtigste Prüfungsfallen

Falle 1 — Spring vs. Spring Boot

Falsch:


Spring Boot ersetzt Spring Framework.

Richtig:


Spring Boot nutzt Spring Framework und ergänzt Convenience-Features.

Falle 2 — @SpringBootApplication

Falsch:


@SpringBootApplication ist nur eine einfache Annotation ohne besondere Bedeutung.

Richtig:


@SpringBootApplication kombiniert @Configuration, @EnableAutoConfiguration und @ComponentScan.

Falle 3 — Starter vs. Auto-Konfiguration

Falsch:


Ein starter erzeugt direkt Beans.

Richtig:


Ein starter bringt Dependencies. Auto-configuration erzeugt/konfiguriert Beans basierend auf diesen Dependencies.

Falle 4 — Dependency-Versionen

Falsch:


Ich sollte für jede Spring Boot Dependency manuell Versionen angeben.

Richtig:


Spring Boot dependency management liefert kompatible Versionen. Normalerweise lässt du Versionen für Boot-verwaltete Dependencies weg.

Falle 5 — JPA Starter und Database Driver

Falsch:


spring-boot-starter-data-jpa enthält automatisch den PostgreSQL Driver.

Richtig:


Der JPA starter liefert JPA- und Hibernate-Support, aber du brauchst trotzdem den Database Driver.

Beispiel:


implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("org.postgresql:postgresql")

Falle 6 — Auto-Konfiguration ist kein Zauber

Falsch:


Spring Boot erzeugt zufällig Beans.

Richtig:


Spring Boot nutzt Conditions basierend auf Classpath, Properties, vorhandenen Beans, Profilen und Application Type.

Falle 7 — Back-off

Falsch:


Boot erzeugt immer seine Default Bean.

Richtig:


Viele Auto-Konfigurationen backen ab, wenn du deine eigene passende Bean definierst.

Falle 8 — Component Scan vs. Auto-Konfiguration

Falsch:


Component scanning und auto-configuration sind dasselbe.

Richtig:


Component scanning findet deine annotierten Klassen.
Auto-configuration wendet Boot-Konfigurationsklassen conditional an.

Falle 9 — Actuator Exposure

Falsch:


Actuator hinzufügen exponiert alle Endpoints öffentlich.

Richtig:


Actuator-Endpoints müssen exposed werden. Sensible Endpoints solltest du absichern.

Falle 10 — YAML *

Falsch:


management:
endpoints:
web:
exposure:
include: *

Richtig:


management:
endpoints:
web:
exposure:
include: "*"

Falle 11 — Runners

Falsch:


CommandLineRunner und ApplicationRunner laufen, bevor Spring Beans erzeugt.

Richtig:


Runners laufen, nachdem der ApplicationContext erzeugt und refreshed wurde.

Falle 12 — CommandLineRunner vs. ApplicationRunner


CommandLineRunner bekommt rohe String-Args.
ApplicationRunner bekommt geparste ApplicationArguments.

Falle 13 — ApplicationStartedEvent vs. ApplicationReadyEvent


ApplicationStartedEvent kommt vor den Runners.
ApplicationReadyEvent kommt nach den Runners.

Falle 14 — Lazy Initialization

Falsch:


Lazy initialization verbessert nur und hat keinen Nachteil.

Richtig:


Lazy initialization kann die Startup-Zeit verbessern, aber Fehler bis zur Laufzeit verzögern.

Falle 15 — Debugging

Falsch:


Ich muss raten, warum auto-configuration passiert ist.

Richtig:


Nutze --debug, debug=true, /actuator/conditions, /actuator/beans und /actuator/configprops.

Übungsfragen

Frage 1

Was ist Spring Boot?

Antwort:

Spring Boot ist ein Projekt, das auf dem Spring Framework aufbaut und Spring-Anwendungen einfacher zu konfigurieren, zu starten, zu überwachen und zu deployen macht.


Frage 2

Welches Problem löst Spring Boot?

Antwort:

Spring Boot reduziert manuelle Konfiguration durch starter dependencies, auto-configuration, embedded server support, external configuration conventions und production-ready Features wie Actuator.


Frage 3

Was ist der Unterschied zwischen Spring Framework und Spring Boot?

Antwort:

Spring Framework liefert Kernfeatures wie IoC, dependency injection, AOP, MVC, Transactions und Data Access. Spring Boot baut auf Spring Framework auf und ergänzt auto-configuration, starters, embedded server support und production-ready Features.


Frage 4

Was enthält @SpringBootApplication?

Antwort:

@SpringBootApplication enthält:


@Configuration
@EnableAutoConfiguration
@ComponentScan

Frage 5

Was macht @EnableAutoConfiguration?

Antwort:

@EnableAutoConfiguration aktiviert Spring Boots auto-configuration-Mechanismus, der Beans basierend auf Classpath, Properties, vorhandenen Beans, Conditions, Profilen und Application Type konfiguriert.


Frage 6

Was ist ein Spring Boot starter?

Antwort:

Ein Spring Boot starter ist ein Dependency-Bundle, das gemeinsame Libraries für ein bestimmtes Feature zusammenbringt — z. B. web, JPA, security, validation, testing oder Actuator.


Frage 7

Was ist der Unterschied zwischen einem starter und auto-configuration?

Antwort:

Ein starter bringt Dependencies auf den Classpath. Auto-configuration konfiguriert Beans basierend auf diesen Dependencies und anderen Conditions.


Frage 8

Was ist eine transitive dependency?

Antwort:

Eine transitive dependency ist eine Dependency, die indirekt durch eine andere Dependency mitgebracht wird.


Frage 9

Was ist dependency management?

Antwort:

Dependency management heißt: ein bekanntes Set von Dependency-Versionen nutzen, damit Libraries korrekt zusammenarbeiten.


Frage 10

Warum solltest du für Boot-verwaltete Dependencies normalerweise keine Versionen angeben?

Antwort:

Weil Spring Boot dependency management kompatible Versionen für viele gängige Libraries liefert. Manuelles Überschreiben von Versionen kann Kompatibilitätsprobleme verursachen.


Frage 11

Was ist auto-configuration?

Antwort:

Auto-configuration ist Spring Boots Mechanismus, Beans automatisch zu konfigurieren — basierend auf Classpath-Dependencies, Properties, vorhandenen Beans, Conditions, Profilen und Application Type.


Frage 12

Was macht @ConditionalOnClass?

Antwort:

@ConditionalOnClass wendet Konfiguration nur an, wenn eine bestimmte Klasse auf dem Classpath vorhanden ist.


Frage 13

Was macht @ConditionalOnMissingBean?

Antwort:

@ConditionalOnMissingBean erzeugt eine Bean nur, wenn noch keine passende Bean existiert.


Frage 14

Was bedeutet auto-configuration back-off?

Antwort:

Back-off heißt: Spring Boot erzeugt seine Default Bean nicht, weil der User bereits eine passende Bean bereitgestellt hat.


Frage 15

Was macht @ConditionalOnProperty?

Antwort:

@ConditionalOnProperty wendet Konfiguration nur an, wenn eine bestimmte Property einen passenden Wert hat.


Frage 16

Wie kannst du auto-configuration debuggen?

Antwort:

Nutze --debug, debug=true, Startup-Logs, Actuator /actuator/conditions, /actuator/beans, /actuator/configprops und Dependency-Tree-Tools.


Frage 17

Was ist Spring Boot Actuator?

Antwort:

Spring Boot Actuator liefert production-ready Monitoring- und Management-Features über operative Endpoints.


Frage 18

Was zeigt /actuator/health?

Antwort:

/actuator/health zeigt den Application-Health-Status, z. B. UP, DOWN, OUT_OF_SERVICE oder UNKNOWN.


Frage 19

Was zeigt /actuator/metrics?

Antwort:

/actuator/metrics zeigt Runtime-Metriken wie JVM Memory, HTTP Request Metrics, CPU Usage, Thread Counts und Custom Metrics.


Frage 20

Was zeigt /actuator/conditions?

Antwort:

/actuator/conditions zeigt, welche Auto-Konfigurationen gematcht haben oder nicht — und warum.


Frage 21

Was macht SpringApplication.run(...)?

Antwort:

SpringApplication.run(...) startet die Spring Boot-Anwendung, indem es den ApplicationContext erzeugt und refreshed, Konfiguration lädt, auto-configuration anwendet, Components scannt, Beans erzeugt, Dependencies injiziert, den Web Server bei Bedarf startet, Runners ausführt und Application Events published.


Frage 22

Was ist CommandLineRunner?

Antwort:

CommandLineRunner ist ein Callback-Interface, das Code nach dem Start des Application Context ausführt. Es bekommt rohe Command-Line-Argumente als String... args.


Frage 23

Was ist ApplicationRunner?

Antwort:

ApplicationRunner ist ein Callback-Interface, das Code nach dem Start des Application Context ausführt. Es bekommt geparste Argumente als ApplicationArguments.


Frage 24

Was ist ApplicationReadyEvent?

Antwort:

ApplicationReadyEvent wird published, wenn die Anwendung vollständig gestartet und bereit ist — nachdem die Runners ausgeführt wurden.


Frage 25

Was ist lazy initialization?

Antwort:

Lazy initialization heißt: Beans werden erst erzeugt, wenn sie zum ersten Mal gebraucht werden — statt eager während des Startups.

7. Mini-Mock-Prüfung — Woche 3

Anleitung

Ohne Notizen antworten.

Empfohlene Zeit:


40 Minuten

Bestehensgrenze:


80 %

40 Fragen.


Frage 1

Was ist Spring Boot?

A. Ein Ersatz für Java
B. Ein Projekt auf Basis von Spring Framework, das Konfiguration, Start, Monitoring und Deployment vereinfacht
C. Nur ein Database Framework
D. Ein Frontend Framework

Meine Antwort:


Frage 2

Welche Annotation ist der Haupteinstieg für eine Spring Boot-Anwendung?

A. @Service
B. @SpringBootApplication
C. @Entity
D. @Repository

Meine Antwort:


Frage 3

Was enthält @SpringBootApplication?

A. @Configuration, @EnableAutoConfiguration, @ComponentScan
B. @Service, @Repository, @Entity
C. @RestController, @Bean, @Table
D. @Autowired, @Transactional, @Test

Meine Antwort:


Frage 4

Was macht @ComponentScan?

A. Findet Application Components in Packages
B. Erzeugt Database Indexes
C. Führt Unit Tests aus
D. Baut Docker Images

Meine Antwort:


Frage 5

Wo scannt Spring Boot standardmäßig?

A. In jedem Package der JVM
B. Vom Package der Klasse mit @SpringBootApplication und ihren Subpackages
C. Nur aus java.lang
D. Nur aus Database Packages

Meine Antwort:


Frage 6

Was macht @EnableAutoConfiguration?

A. Aktiviert Spring Boot auto-configuration
B. Aktiviert nur JPA Repositories
C. Deaktiviert dependency injection
D. Erzeugt Frontend Components

Meine Antwort:


Frage 7

Was ist ein Spring Boot starter?

A. Ein Dependency-Bundle für ein Feature
B. Eine Controller-Methode
C. Eine SQL Migration
D. Ein Kubernetes Pod

Meine Antwort:


Frage 8

Was bringt spring-boot-starter-web normalerweise?

A. Spring MVC, embedded Tomcat, Jackson, Web Infrastructure
B. Nur PostgreSQL
C. Nur JUnit
D. Nur Flyway

Meine Antwort:


Frage 9

Was liefert spring-boot-starter-data-jpa?

A. React Components
B. JPA, Hibernate, Spring Data JPA Support
C. CSS Tools
D. Docker Registry Support

Meine Antwort:


Frage 10

Brauchst du mit dem JPA starter trotzdem einen Database Driver?

A. Ja
B. Nein
C. Nur für Frontend Apps
D. Nur für Tests

Meine Antwort:


Frage 11

Welcher starter wird häufig für Bean Validation genutzt?

A. spring-boot-starter-validation
B. spring-boot-starter-css
C. spring-boot-starter-docker
D. spring-boot-starter-clock

Meine Antwort:


Frage 12

Was kann passieren, nachdem du spring-boot-starter-security hinzufügst?

A. Endpoints können standardmäßig abgesichert werden
B. JPA wird deaktiviert
C. Die JVM fährt sofort herunter
D. YAML-Dateien werden gelöscht

Meine Antwort:


Frage 13

Was ist dependency management?

A. Manuell zufällige Versionen wählen
B. Ein kompatibles Set von Dependency-Versionen nutzen
C. Alle transitiven Dependencies entfernen
D. SQL Queries schreiben

Meine Antwort:


Frage 14

Solltest du für Boot-verwaltete Dependencies normalerweise manuell Versionen angeben?

A. Ja, immer
B. Nein, normalerweise von Spring Boot verwalten lassen
C. Nur für Controller
D. Nur für Testklassen

Meine Antwort:


Frage 15

Was ist eine transitive dependency?

A. Eine Dependency, die indirekt durch eine andere Dependency mitgebracht wird
B. Eine Dependency nur für CSS
C. Eine Dependency, die nicht heruntergeladen werden kann
D. Eine Database Row

Meine Antwort:


Frage 16

Was ist die Spring Boot BOM?

A. Bill of Materials, die Dependency-Versionen definiert
B. Ein REST Controller
C. Eine Database Migration Datei
D. Ein Logging Statement

Meine Antwort:


Frage 17

Was ist auto-configuration?

A. Manuell alle Beans erzeugen
B. Automatische conditional Konfiguration basierend auf Classpath, Properties, Beans und Conditions
C. Ein CSS Feature
D. Ein Ersatz für Java

Meine Antwort:


Frage 18

Was prüft @ConditionalOnClass?

A. Ob eine Klasse auf dem Classpath vorhanden ist
B. Ob eine Klasse nur public ist
C. Ob eine Klasse Kommentare hat
D. Ob eine Klasse in Git liegt

Meine Antwort:


Frage 19

Was macht @ConditionalOnMissingBean?

A. Erzeugt eine Bean nur, wenn noch keine passende Bean existiert
B. Löscht fehlende Beans
C. Erzeugt alle Beans doppelt
D. Startet Tomcat manuell

Meine Antwort:


Frage 20

Was bedeutet back-off?

A. Boot erzeugt seine Default Bean nicht, weil der User eine bereitgestellt hat
B. Boot stoppt das Scannen aller Klassen
C. Boot deaktiviert Java
D. Boot entfernt alle Profile

Meine Antwort:


Frage 21

Was macht @ConditionalOnProperty?

A. Wendet Konfiguration basierend auf Property-Werten an
B. Erzeugt Database Columns
C. Deaktiviert Actuator
D. Führt nur Tests aus

Meine Antwort:


Frage 22

Was ist der Unterschied zwischen component scanning und auto-configuration?

A. Kein Unterschied
B. Component scanning findet deine Klassen; auto-configuration wendet Boot-Konfiguration conditional an
C. Component scanning funktioniert nur in Frontend Apps
D. Auto-configuration funktioniert nur mit XML

Meine Antwort:


Frage 23

Wie siehst du Auto-Konfigurationsentscheidungen?

A. /actuator/conditions
B. /api/users
C. /static/index.html
D. /database/schema

Meine Antwort:


Frage 24

Was ist Spring Boot Actuator?

A. Production-ready Monitoring- und Management-Features
B. Ein Database Migration Tool
C. Ein CSS Compiler
D. Ein Frontend Router

Meine Antwort:


Frage 25

Welche Dependency fügt Actuator hinzu?

A. spring-boot-starter-actuator
B. spring-boot-starter-html
C. spring-boot-starter-git
D. spring-boot-starter-terminal

Meine Antwort:


Frage 26

Was ist der Standard-Actuator-Basispfad?

A. /actuator
B. /admin-only
C. /api
D. /spring

Meine Antwort:


Frage 27

Was zeigt /actuator/health?

A. Application Health Status
B. Alle Database Rows
C. Frontend CSS
D. Git Branches

Meine Antwort:


Frage 28

Was zeigt /actuator/metrics?

A. Runtime Metrics
B. Nur User Passwords
C. Nur Source Code
D. Nur Database Schemas

Meine Antwort:


Frage 29

Was zeigt /actuator/beans?

A. Registrierte Spring Beans
B. Browser Cookies
C. Nur Maven Repositories
D. CSS Classes

Meine Antwort:


Frage 30

Was zeigt /actuator/configprops?

A. @ConfigurationProperties Beans und gebundene Werte
B. Nur REST Responses
C. Nur SQL Indexes
D. Nur Static Files

Meine Antwort:


Frage 31

Wie exponierst du alle Actuator-Endpoints in YAML?

A. include: "*"
B. include: all-without-quotes-only
C. exposeEverything: true
D. actuator.all=true

Meine Antwort:


Frage 32

Warum sollten Actuator-Endpoints abgesichert werden?

A. Sie können sensible interne Informationen preisgeben
B. Sie sind immer öffentliche CSS Files
C. Sie löschen automatisch die Database
D. Sie deaktivieren die JVM

Meine Antwort:


Frage 33

Was macht SpringApplication.run(...)?

A. Startet die Spring Boot-Anwendung und erzeugt/refreshed den Application Context
B. Druckt nur Text
C. Kompiliert nur Java Code
D. Startet nur React

Meine Antwort:


Frage 34

Was ist CommandLineRunner?

A. Führt Startup-Code mit rohen String... args aus
B. Führt CSS Compilation aus
C. Führt nur Database Backup aus
D. Läuft vor dem Start von Java

Meine Antwort:


Frage 35

Was ist ApplicationRunner?

A. Führt Startup-Code mit geparsten ApplicationArguments aus
B. Läuft nur in Browsern
C. Führt nur SQL aus
D. Ersetzt Spring Security

Meine Antwort:


Frage 36

Wann laufen Runners?

A. Nach dem Start des Application Context
B. Vor der Java main-Methode
C. Bevor irgendeine Bean existiert
D. Nur nach dem App-Shutdown

Meine Antwort:


Frage 37

Was passiert, wenn ein Runner eine Exception wirft?

A. Der Startup schlägt normalerweise fehl
B. Es passiert nie etwas
C. Spring ignoriert es immer
D. Es wird ein HTTP 404

Meine Antwort:


Frage 38

Wann wird ApplicationReadyEvent published?

A. Nachdem die App vollständig gestartet ist und Runners gelaufen sind
B. Bevor die Environment vorbereitet wird
C. Vor der main-Methode
D. Nur beim Shutdown

Meine Antwort:


Frage 39

Was ist lazy initialization?

A. Beans werden erst erzeugt, wenn sie zum ersten Mal gebraucht werden
B. Beans werden nie erzeugt
C. Beans werden doppelt erzeugt
D. Beans werden zu JSON konvertiert

Meine Antwort:


Frage 40

Was ist ein Risiko von lazy initialization?

A. Fehler können bis zur Laufzeit verzögert werden
B. Java kann nicht kompilieren
C. Actuator wird gelöscht
D. Starters funktionieren nicht mehr

Meine Antwort:


8. Lösungen Mini-Mock-Prüfung

Lösungsschlüssel


1. B
2. B
3. A
4. A
5. B
6. A
7. A
8. A
9. B
10. A
11. A
12. A
13. B
14. B
15. A
16. A
17. B
18. A
19. A
20. A
21. A
22. B
23. A
24. A
25. A
26. A
27. A
28. A
29. A
30. A
31. A
32. A
33. A
34. A
35. A
36. A
37. A
38. A
39. A
40. A

9. Punkte


Gesamtfragen: 40
Richtige Antworten:
Falsche Antworten:
Punkte:

Punkteberechnung:


richtige Antworten / 40 * 100

Beispiel:


32 / 40 * 100 = 80 %

10. Fehler-Review-Vorlage

Für jede falsche Antwort schreibst du:


## Fehler

Fragennummer:

Meine falsche Antwort:

Richtige Antwort:

Warum ich falsch lag:

Richtiges Konzept:

Merksatz:

Beispiel:


## Fehler

Fragennummer: 20

Meine falsche Antwort: B

Richtige Antwort: A

Warum ich falsch lag:
Ich dachte, back-off heißt, Boot deaktiviert auto-configuration komplett.

Richtiges Konzept:
Back-off heißt: Boot erzeugt seine Default Bean nicht, weil der User bereits eine passende Bean bereitgestellt hat.

Merksatz:
Back-off heißt: Boot tritt für meine Bean zurück.

11. Szenario-Fragen aus der Praxis

Diese Fragen sind praxisnäher und interview-ähnlich.


Szenario 1 — Web Starter fehlt

Code:


@RestController
@RequestMapping("/api/tasks")
public class TaskController {

@GetMapping
public List<String> tasks() {
return List.of("A", "B");
}
}

Aber die App exponiert keine HTTP-Endpoints.

Frage:

Was könnte fehlen?

Meine Antwort:

Musterantwort

Dem Projekt fehlt vielleicht:


implementation("org.springframework.boot:spring-boot-starter-web")

Ohne den web starter konfiguriert Spring Boot möglicherweise weder Spring MVC noch embedded Tomcat.


Szenario 2 — JPA Starter, aber keine Database

Dependency:


implementation("org.springframework.boot:spring-boot-starter-data-jpa")

Fehler:


Failed to configure a DataSource

Frage:

Warum?

Meine Antwort:

Musterantwort

Der JPA starter bringt JPA-/Database-bezogene Klassen auf den Classpath. Spring Boots DataSource auto-configuration matcht und versucht, eine DataSource zu konfigurieren. Wenn keine Database URL, kein Driver und keine embedded Database verfügbar ist, schlägt der Startup fehl.

Fix-Optionen:


DataSource konfigurieren
Database Driver hinzufügen
embedded Database für Tests nutzen
JPA starter entfernen, wenn nicht gebraucht
DataSourceAutoConfiguration nur excluden, wenn wirklich keine Database gebraucht wird

Szenario 3 — Security Starter Überraschung

Hinzugefügte Dependency:


implementation("org.springframework.boot:spring-boot-starter-security")

Plötzlich brauchen Endpoints Login.

Frage:

Warum?

Meine Antwort:

Musterantwort

Spring Security liegt jetzt auf dem Classpath. Security auto-configuration matcht und wendet Default-Security-Verhalten an. Definiere eine SecurityFilterChain Bean, um Authorization Rules anzupassen.


Szenario 4 — Custom ObjectMapper

Code:


@Configuration
public class JsonConfig {

@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().findAndRegisterModules();
}
}

Frage:

Was kann mit Boots Default ObjectMapper passieren?

Meine Antwort:

Musterantwort

Wenn Boots ObjectMapper auto-configuration @ConditionalOnMissingBean nutzt, kann sie backen, weil du bereits eine ObjectMapper Bean definiert hast. Deine Bean kann Boots Default ersetzen.


Szenario 5 — Actuator Endpoint 404

Du hast hinzugefügt:


implementation("org.springframework.boot:spring-boot-starter-actuator")

Aber das liefert 404:


/actuator/conditions

Frage:

Warum?

Meine Antwort:

Musterantwort

Der Endpoint ist wahrscheinlich nicht über HTTP exposed. Füge hinzu:


management:
endpoints:
web:
exposure:
include: conditions

oder expose mehrere Endpoints:


management:
endpoints:
web:
exposure:
include: health,info,conditions

Szenario 6 — Gefährliche Actuator Exposure

Config:


management:
endpoints:
web:
exposure:
include: "*"

Frage:

Was ist gefährlich?

Meine Antwort:

Musterantwort

Das exponiert alle Actuator-Endpoints über HTTP. Manche Endpoints können sensible interne Informationen preisgeben — z. B. Environment Properties, configuration properties, Bean-Struktur, Mappings, Thread Dumps oder Heap Dumps. In Production nur benötigte Endpoints exposen und absichern.


Szenario 7 — Runner läuft in Production

Code:


@Component
public class SeedRunner implements CommandLineRunner {

@Override
public void run(String... args) {
seedDemoData();
}
}

Frage:

Was ist gefährlich?

Meine Antwort:

Musterantwort

Der Runner läuft bei jedem Startup in jedem Profil — auch in Production. Wenn er Daten ändert, kann das gefährlich sein. Schütze ihn mit @Profile("dev") oder @ConditionalOnProperty.


Szenario 8 — Lazy Initialization versteckt Fehler

Config:


spring:
main:
lazy-initialization: true

Die App startet erfolgreich, aber der erste Request schlägt fehl, weil eine Bean eine fehlende Dependency hat.

Frage:

Warum?

Meine Antwort:

Musterantwort

Lazy initialization hat die Bean-Erzeugung verzögert, bis die Bean zum ersten Mal gebraucht wurde. Die fehlende Dependency wurde nicht beim Startup entdeckt. Lazy initialization kann den Startup beschleunigen, aber Fehler bis zur Laufzeit verzögern.


12. Mündliche Abschlussprüfung — Woche 3

Diese Fragen laut beantworten.

Frage 1

Erkläre, was Spring Boot ist.


Frage 2

Erkläre @SpringBootApplication.


Frage 3

Erkläre den Unterschied zwischen Spring Framework und Spring Boot.


Frage 4

Erkläre Spring Boot starters.


Frage 5

Erkläre dependency management.


Frage 6

Erkläre auto-configuration.


Frage 7

Erkläre auto-configuration back-off.


Frage 8

Erkläre, wie du auto-configuration debuggst.


Frage 9

Erkläre Spring Boot Actuator.


Frage 10

Erkläre SpringApplication.run.


Frage 11

Erkläre CommandLineRunner vs. ApplicationRunner.


Frage 12

Erkläre lazy initialization.


13. Gute mündliche Antworten

Mündliche Antwort 1 — Spring Boot

Spring Boot ist ein Projekt, das auf dem Spring Framework aufbaut. Es macht Spring-Anwendungen einfacher zu konfigurieren, zu starten, zu überwachen und zu deployen. Es liefert starter dependencies, auto-configuration, embedded server support, external configuration conventions und production-ready Features wie Actuator. Es ersetzt Spring Framework nicht — es nutzt es.


Mündliche Antwort 2 — @SpringBootApplication

@SpringBootApplication ist die Hauptannotation für eine Spring Boot-Anwendung. Sie kombiniert @Configuration, @EnableAutoConfiguration und @ComponentScan. @Configuration erlaubt Bean-Definitionen, @EnableAutoConfiguration aktiviert Boots conditional auto-configuration, und @ComponentScan scannt das aktuelle Package und Subpackages nach Components.


Mündliche Antwort 3 — Spring Framework vs. Spring Boot

Spring Framework liefert die Kernfeatures wie IoC, dependency injection, AOP, MVC, Transactions und Data Access. Spring Boot baut auf Spring Framework auf und ergänzt Convenience-Features wie starters, auto-configuration, embedded server support, external configuration conventions und Actuator.


Mündliche Antwort 4 — Starters

Spring Boot starters sind Dependency-Bundles. Sie bringen gemeinsame Libraries für ein bestimmtes Feature. Zum Beispiel bringt spring-boot-starter-web Spring MVC, embedded Tomcat, Jackson und Web-Infrastructure-Dependencies. Starters reduzieren Dependency-Boilerplate und arbeiten mit auto-configuration zusammen.


Mündliche Antwort 5 — Dependency Management

Spring Boot dependency management liefert ein kompatibles Set von Dependency-Versionen. Das heißt: Normalerweise gibst du für Boot-verwaltete Dependencies keine Versionen manuell an. Boot wählt Versionen, die gut zusammenarbeiten — und reduziert Runtime-Fehler wie NoSuchMethodError, ClassNotFoundException oder Dependency-Konflikte.


Mündliche Antwort 6 — Auto-Konfiguration

Auto-configuration ist Spring Boots Mechanismus, Beans automatisch zu konfigurieren — basierend auf Classpath-Dependencies, Application Properties, vorhandenen Beans, aktiven Profilen, Application Type und Conditions. Es ist kein Zauber; es ist conditional Konfiguration. Wenn Spring MVC und Tomcat auf dem Classpath liegen, kann Boot z. B. eine Servlet Web Application konfigurieren.


Mündliche Antwort 7 — Back-off

Back-off heißt: Spring Boot erzeugt seine Default Bean nicht, weil du bereits eine passende Bean definiert hast. Das wird häufig mit @ConditionalOnMissingBean umgesetzt. So liefert Boot Defaults, während Entwickler die Anwendung trotzdem anpassen können.


Mündliche Antwort 8 — Auto-Konfiguration debuggen

Zum Debuggen von auto-configuration prüfst du Dependencies, aktive Profile, Properties und vorhandene Beans. Du kannst die App mit --debug oder debug=true starten, um Condition-Evaluation-Logs zu sehen. Mit Actuator nutzt du /actuator/conditions für Auto-Konfigurations-Matches, /actuator/beans für registrierte Beans und /actuator/configprops für gebundene configuration properties.


Mündliche Antwort 9 — Actuator

Spring Boot Actuator liefert production-ready Monitoring- und Management-Features. Es exponiert operative Endpoints wie /actuator/health, /actuator/info, /actuator/metrics, /actuator/beans, /actuator/conditions und /actuator/configprops. Diese Endpoints helfen, die Anwendung zu überwachen und Runtime-Konfiguration zu debuggen. Sensible Endpoints solltest du absichern und nicht öffentlich exposen.


Mündliche Antwort 10 — SpringApplication.run

SpringApplication.run startet die Spring Boot-Anwendung. Es bereitet die Environment vor, lädt Konfiguration, erzeugt und refreshed den ApplicationContext, wendet auto-configuration an, scannt Components, erzeugt Beans, injiziert Dependencies, führt Lifecycle Callbacks aus, startet den embedded Server bei Bedarf, führt Startup Runners aus und published Application Events.


Mündliche Antwort 11 — CommandLineRunner vs. ApplicationRunner

Beide laufen nach dem Start des Application Context. CommandLineRunner bekommt rohe Command-Line-Argumente als String... args. ApplicationRunner bekommt geparste Argumente als ApplicationArguments Objekt. Nutze ApplicationRunner, wenn du strukturierte Option- und Non-Option-Argumente brauchst.


Mündliche Antwort 12 — Lazy Initialization

Lazy initialization heißt: Spring erzeugt Beans erst, wenn sie zum ersten Mal gebraucht werden — statt eager während des Startups. Das kann die Startup-Zeit verbessern und Memory Usage beim Startup reduzieren, kann aber auch Fehler bis zur Laufzeit verzögern. Eine fehlende Dependency in einer lazy Bean taucht z. B. erst beim ersten Request auf, der diese Bean nutzt.


14. Readiness-Checkliste Woche 3

Bevor du zu Woche 4 weitergehst, solltest du alles Folgende abhaken können:


[ ] Ich kann erklären, was Spring Boot ist.
[ ] Ich kann Spring Framework und Spring Boot vergleichen.
[ ] Ich weiß, was @SpringBootApplication enthält.
[ ] Ich kann @Configuration erklären.
[ ] Ich kann @EnableAutoConfiguration erklären.
[ ] Ich kann @ComponentScan erklären.
[ ] Ich weiß, wo Spring Boot standardmäßig scannt.
[ ] Ich weiß, warum die Main Class im Root Package liegen sollte.
[ ] Ich kann starters erklären.
[ ] Ich kann dependency management erklären.
[ ] Ich kann transitive dependencies erklären.
[ ] Ich weiß, warum Versionen normalerweise weggelassen werden.
[ ] Ich weiß, was die Spring Boot BOM ist.
[ ] Ich weiß, was spring-boot-starter-web liefert.
[ ] Ich weiß, was spring-boot-starter-data-jpa liefert.
[ ] Ich weiß, dass JPA trotzdem einen Database Driver braucht.
[ ] Ich weiß, dass validation oft spring-boot-starter-validation braucht.
[ ] Ich weiß, dass der security starter Endpoints absichern kann.
[ ] Ich kann auto-configuration erklären.
[ ] Ich kann Conditions erklären.
[ ] Ich kann @ConditionalOnClass erklären.
[ ] Ich kann @ConditionalOnMissingBean erklären.
[ ] Ich kann @ConditionalOnProperty erklären.
[ ] Ich kann back-off erklären.
[ ] Ich kann component scanning und auto-configuration vergleichen.
[ ] Ich kann auto-configuration mit --debug und Actuator debuggen.
[ ] Ich kann Actuator erklären.
[ ] Ich kenne gängige Actuator-Endpoints.
[ ] Ich kann health, info, metrics, beans, conditions, configprops erklären.
[ ] Ich weiß, dass Actuator-Endpoints abgesichert werden sollten.
[ ] Ich kann SpringApplication.run erklären.
[ ] Ich kann den Startup-Flow erklären.
[ ] Ich kann CommandLineRunner erklären.
[ ] Ich kann ApplicationRunner erklären.
[ ] Ich weiß, dass Runners nach dem Context-Startup laufen.
[ ] Ich kann ApplicationReadyEvent erklären.
[ ] Ich kann lazy initialization erklären.
[ ] Ich weiß, dass lazy initialization Fehler verzögern kann.

15. Schwache Themen vor Woche 4

Schwache Themen hier eintragen:


## Meine Schwachstellen

1.
2.
3.
4.
5.

Für jedes schwache Thema:


## Schwachstelle

Thema:

Warum es verwirrend ist:

Richtige Erklärung:

Code-Beispiel:

Merksatz:

16. Abschluss-Zusammenfassung Woche 3

Woche 3 hat dir gezeigt, wie Spring Boot Spring einfacher macht.

Die wichtigste Idee:


Spring Boot ist Spring plus Conventions, starters, auto-configuration, Monitoring und einfacherem Startup.

Spring Boot startet mit:


@SpringBootApplication

was enthält:


@Configuration
@EnableAutoConfiguration
@ComponentScan

Starters:


bringen Dependencies

Auto-configuration:


konfiguriert Beans conditional

Actuator:


zeigt operative Informationen über eine laufende App

Startup runners:


führen Code nach dem Start des Application Context aus

Lazy initialization:


erzeugt Beans erst, wenn sie zum ersten Mal gebraucht werden

Wenn du Woche 3 gut verstanden hast, bist du bereit für Woche 4:


Spring MVC und REST APIs