Questa cosa interessa anche me in prima persona... Anche io sono del filone Spring (Boot in particolare) ed effettivamente giusto qualche giorno fa cercavo un modo per gestire in maniera asincrona le chiamate ai servizi che stanno dietro le mie API (controller nel mio caso). Leggendo Cloud Native Java ( http://shop.oreilly.com/product/0636920038252.do) ho trovato una cosa molto simile a quanto suggerito dal tuo collega in effetti. Nonostante sia un grande fan di Spring Boot, nutro un po' di sospetti sull'effettiva efficacia di questa "semplice" annotazione, per cui seguo con molto interesse il thread...
Ciao! Marco [image: Google Developer Group Torino] Marco Terrinoni / GDG Manager [email protected] / +393772055208 Google Developer Group Torino [image: Twitter] <https://twitter.com/TerrinoniMarco> [image: Google +] <https://plus.google.com/+MarcoTerrinoni> [image: LinkedIn] <https://it.linkedin.com/in/marcoterrinoni> [image: Github] <https://github.com/terrinoni> [image: Stack Overflow] <http://stackoverflow.com/users/3493420/marco> [image: Bitbucket] <https://bitbucket.org/marco_terrinoni/> 2018-03-29 16:19 GMT+02:00 Federico Fissore [email protected] [it-torino-java-jug] <[email protected]>: > > > Ciao a tutti > > l'altro giorno stavo chattando con un collega su CompletableFuture e > AsyncResponse di jax.rs. Lui, fan di spring, mi risponde che per rendere > una API REST asincrona ti basta scrivere una cosa come > > @RequestMapping(value = "/callable", method = RequestMethod.GET) > public Callable<String> executeSlowTask() { > Callable<String> callable = taskService.execute(); > > return callable; > } > > Cioè wrappa in un Callable tutto il codice sincrono e sequenziale che > hai, punto. > > L'approccio non mi ha convinto. Tutte le attività potenzialmente > asyncrone, come le query verso un db o le chiamate http ad altri > servizi, vengono trattate come sincrone e gestite dal thread del thread > pool con cui `taskService` lavora. > > Poi ho pensato che in effetti non ho fatto una scelta migliore quando ho > convertito tutte le API (java) a CompletableFuture, che di default si > basa sul `ForkJoinPool.commonPool()`, di nuovo un unico thread pool > comune a tutti i task. > > Quindi qual è il modo migliore per far fare alla CPU altro lavoro mentre > è in attesa del risultato di una query? > Oppure ha ragione il mio collega e potevo risparmiarmi del lavoro? > > federico > >
