Je voudrais implémenter une tâche asynchrone, et une page qui retourne immédiatement et démarre la tâche en arrière-plan. Cependant, la page attend à la place que la tâche d'arrière-plan se termine et retourne seulement après. Quand je visite /start
cela prend 15s pour charger la page. J'utilise Spring 3.2.0. J'ai une ligne contenant <task:annotation-driven/>
dans mon test-servlet.xml. La chose étrange est que même si je remplace @Async avec @Async ("this_bean_does_not_exist"), l'application fait de même (bien que je m'attendrais à une exception pour référencer un bean non existant).Spring MVC Async tâche s'exécute de manière synchrone
public interface AsyncTestService {
void startSlowProcess();
}
@Service
public class AsyncTestServiceImpl implements AsyncTestService {
@Override
@Async
public void startSlowProcess() {
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
@Controller
public class TestController {
@Autowired
AsyncTestService asyncTestService;
@RequestMapping("/start")
@ResponseBody
public String startSlowProcess() {
asyncTestService.startSlowProcess(); // It takes 15s to complete
return "STARTED"; // should return immediately
}
}
J'ai essayé ça aussi avec le même résultat. –
Avez-vous nettoyé votre projet avant de le tester? Pourriez-vous vérifier, si l'exécuteur est en cours d'exécution? Selon les documents (voir le lien ci-dessus), une instance d'exécuteur explicitement déclarée est requise pour que cela fonctionne. –
Oui! Il me manquait EnableAsync de ma config. Je vous remercie! –