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
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.