0 Tage Serie
java / expert
Snippet

Asynchrone Anfrageverarbeitung mit DeferredResult

DeferredResult ermöglicht es, Servlet-Threads freizugeben, während auf den Abschluss einer Hintergrundaufgabe gewartet wird. Dies verbessert die Skalierbarkeit für lang laufende I/O-Operationen, indem Thread-Mangel vermieden wird.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
@GetMapping("/process")
public DeferredResult<ResponseEntity<String>> processAsync() {
DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(10000L);
CompletableFuture.supplyAsync(() -> longRunningTask())
.thenAccept(res -> result.setResult(ResponseEntity.ok(res)))
.exceptionally(ex -> {
result.setErrorResult(ResponseEntity.status(500).body("Failed"));
return null;
});
return result;
}
spring
Erklärung
1
new DeferredResult<>(10000L)
Erstellt einen Ergebnis-Halter mit einem spezifischen Timeout in Millisekunden.
2
result.setResult(...)
Die Methode, die tatsächlich die finale Antwort an den Client sendet, sobald die Hintergrundarbeit abgeschlossen ist.