2009-12-03 2 views
2

Au printemps, existe-t-il un moyen d'exécuter une tâche après avoir renvoyé une vue ou j'ai besoin de créer un ThreadPool et de le faire?Exécution d'une tâche après le renvoi de modelAndView

Ex:

public ModelAndView handleRequest(HttpServletRequest request, 
    HttpServletResponse response) throws Exception { 

    Map<Object, Object> data = new HashMap<Object, Object>(); 

      //do some stuff 
      executeSomeStuffButDontWaitForTheResult();  
    return new ModelAndView("result", data); 
} 

Répondre

2

Si vous utilisez Spring 3, la méthode la plus simple consiste à annoter votre méthode executeSomeStuffButDontWaitForTheResult avec @Async.

Dans votre configuration:

<task:annotation-driven executor="yourTaskExecutor" scheduler="yourTaskScheduler"/> 

Pour plus d'informations here

2

Spring contient un cadre de programmation orientée aspect qui vous permet de spécifier le code à exécuter avant et après différentes parties de votre code qui peut être le genre de chose que vous recherchez. Jetez un oeil à la documentation de printemps: Aspect Oriented Programming with Spring.

0

Si vous ne voulez vraiment pas attendre le résultat, vous devriez l'exécuter dans un autre thread de toute façon. Par exemple, en utilisant Spring's Task Executor.

0

Vous pouvez utiliser un Executor Tâche comme @axtavt dit ou vous pouvez utiliser Asynchronous JMS

0

Eh oui, c'est juste une question de choix d'un thread ou (mieux) de saisir un fil d'une piscine. Cela n'a rien à voir avec le printemps. Mais en regardant votre code, vous laissez ouverte la possibilité que la vue rende juste une carte partiellement peuplée ou même vide. (Et si vous ne passez pas la carte à la méthode executeSomeStuffButDontWaitForTheResult(), la carte sera vide.) Ce que vous essayez de faire n'est pas clair, mais je doute que vous ayez l'intention de renvoyer une partie ou une partie vide carte, et la carte ne va pas se remplir pendant que l'utilisateur regarde la page Web. Si vous décrivez plus attentivement ce que vous essayez de faire, nous pourrions avoir d'autres idées pour vous.

+0

Je n'ai pas rempli la vue parce que c'est un exemple. Je voulais juste rendre la vue, mais continuer à faire un peu de travail après cela n'a pas besoin d'être rendu. (Pour retourner le résultat plus rapidement au client) – Mike

Questions connexes