2013-08-17 7 views
5

Vorrei chiedere qual è l'approccio migliore per eseguire un lungo processo utilizzando Spring. Ho una webapp e quando il client fa una richiesta esegue un controller Spring. Questo controller otterrebbe alcuni parametri dalla richiesta e quindi eseguirà una query e recupererà i record dal DB.Qual è l'approccio migliore per eseguire un lungo processo utilizzando Spring

I record del DB sono elevati, ho bisogno di fare una logica di confronto che potrebbe richiedere molto tempo, quindi ho bisogno di eseguirlo separatamente. Quando si esegue questo processo, dovrebbe scrivere i risultati finali in un file Excel e spedirlo via posta.

+1

La documentazione Spring ha un intero capitolo dedicato all'esecuzione di task asincroni: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#scheduling –

risposta

4

È possibile utilizzare l'annotazione @Async per restituire immediatamente.

Fisrt, scrivere una classe @Service per elaborare il lavoro DB e Excel.

@Service 
public class AccountService { 
    @Async 
    public void executeTask(){ 
    // DB and Excel job 
    } 
} 

Poi, nel metodo di controllo attivare il task

@Controller 
public class taskController{ 
    @RequestMapping(value = "as") 
    @ResponseBody 
    public ResultInfo async() throws Exception{ 
     accountService.executeTask(); 
     return new ResultInfo(0, "success", null); 
    } 
} 

Infine, aggiungere questo all'applicazione-context.xml (file di configurazione di primavera)

<task:annotation-driven executor="taskExecutor"/> 
<task:executor id="taskExecutor" pool-size="10"/> 

Spero che questo vi aiuterà .

+1

Consigliamo anche di guardare framework "spring batch" per l'elaborazione in batch. Può dimezzare il tempo di esecuzione. – yname

+0

Grazie a @Larrry per la risposta. Tuttavia, sto usando la molla 2.5. C'è un meccanismo equivalente in 2.5 per effettuare chiamate asincrone? In caso contrario, esiste un modo alternativo per effettuare chiamate di servizio asincrone? Per favore suggeriscimi! –

+0

@ L'utente 518469 - Come può Spring Batch ridurre il tempo di esecuzione se viene utilizzato rispetto alla chiamata asincrona. –

Problemi correlati