Spring Enterprise Platform
Spring Boot, Web, Data, Security, Konfiguration und Integrationsgrenzen als zusammenhängende Plattform. Nutze die Seite während Entwurf und Umsetzung: Arbeite an einem konkreten Codepfad und sichere Fachverhalten, Abhängigkeiten und Wartbarkeit mit passenden Tests.
Arbeitsauftrag
Wann verwenden?
Wenn Web-, Data-, Security- oder Konfigurationsfunktionen eines Spring-Services gestaltet werden.
Nicht dafür verwenden
Nicht um fachliche Regeln in Controller, Annotationen oder Frameworkcallbacks zu verstecken.
Definition of Done
Domain bleibt testbar; Adaptergrenzen sind klar; Konfiguration, Fehlervertrag, Security und Integrationstests sind vollständig.
Bootstrapping und Konfiguration
Konfigurationseigenschaften werden typisiert, validiert und nach Verantwortlichkeit gruppiert. Direkte Zugriffe auf ungeprüfte String-Werte verteilen Konfigurationswissen über die Anwendung.
Auto-Configuration ist nützlich, solange ihre Wirkung sichtbar bleibt. Für kritische Infrastruktur sollten Bedingungen und Overrides dokumentiert werden.
@ConfigurationProperties("orders.delivery")
@Validated
public record DeliveryProperties(
@NotNull URI endpoint,
@DurationUnit(ChronoUnit.SECONDS)
Duration timeout,
@Min(1) int maxAttempts) {
}
Web-Adapter
Controller übersetzen HTTP in einen Application Use Case. Fachliche Regeln gehören nicht in Controller, Exception Handler oder Mapper.
Fehlerantworten benötigen stabile Fehlercodes, Correlation IDs und klare Unterscheidung zwischen fachlicher Ablehnung und technischem Fehler.
@RestController
@RequestMapping("/api/orders")
final class OrderController {
private final CreateOrderUseCase useCase;
@PostMapping
ResponseEntity<OrderResponse> create(@Valid @RequestBody CreateOrderRequest request) {
var result = useCase.create(request.toCommand());
return ResponseEntity.status(HttpStatus.CREATED)
.body(OrderResponse.from(result));
}
}
Transaktionen und Persistenzgrenzen
Eine Transaktion schützt eine fachlich zusammengehörige Zustandsänderung. Sie sollte an einem Application Use Case beginnen und nicht zufällig an Repository-Hilfsmethoden.
Externe Aufrufe innerhalb langer Datenbanktransaktionen erhöhen Sperrdauer und Fehlerkopplung. Outbox oder nachgelagerte Prozesse sind häufig robuster.
@Transactional
public OrderId handle(CreateOrderCommand command) {
Order order = factory.create(command);
repository.save(order);
outbox.append(OrderPlaced.from(order));
return order.id();
}
Praxisartefakt · Spring-Slice
- HTTP-Adapter
- Validiert Syntax, übersetzt Request und Fehlervertrag.
- Application Service
- Orchestriert Use Case und Transaktion.
- Domain
- Entscheidet anhand von Invarianten ohne Spring-Abhängigkeit.
- Outbound Port
- Speichert Aggregate und publiziert Outbox-Eintrag.
- Tests
- Domain-Unit-Test, MVC-Slice, Persistenzintegration und Security-Negativtest.