Domanda

Voglio correre processo in background in parallelo con la mia web-application primavera-MVC. Ho bisogno di un modo per iniziare automaticamente il contesto di caricamento. processo in background è una classe che implementa Runnable. È la primavera-MVC ha alcune strutture per questo?

È stato utile?

Soluzione

Primavera dispone di un quadro di esecuzione dell'attività completo. Vedere la parte rilevante dei documenti .

Posso suggerire di avere un bean Spring nel vostro contesto, che, una volta inizializzato, presenta il vostro Runnable sfondo di un fagiolo SimpleAsyncTaskExecutor. Questo è l'approccio più semplice, che è possibile rendere più complessa e capace come si vede in forma.

Altri suggerimenti

vorrei andare avanti e guardare la documentazione di pianificazione delle attività legate da skaffman, ma c'è anche un modo semplice se tutto quello che vuole veramente fare è lanciare un thread in background in fase di inizializzazione contesto.

<bean id="myRunnableThingy">
  ...
</bean>

<bean id="thingyThread" class="java.lang.Thread" init-method="start">
  <constructor-arg ref="myRunnableThingy"/>
</bean>

Come ulteriore opzione, si può ora utilizzare funzionalità di pianificazione di primavera. Con Spring 3 o superiore, ha un cron come un'annotazione che consente di pianificare le attività da eseguire con un semplice annotazione di un metodo. E 'anche amichevole con autowiring.

In questo esempio pianificazioni un compito per ogni 2 minuti con un tempo di attesa iniziale (all'avvio) di 30 secondi. Il compito successivo verrà eseguito 2 minuti dopo il metodo completa! Se si desidera che venga eseguito ogni 2 minuti esatti, utilizzare al posto fixedInterval.

@Service
public class Cron {
private static Logger log = LoggerFactory.getLogger(Cron.class);

@Autowired
private PageService pageService;

@Scheduled(initialDelay = 30000, fixedDelay=120000)  // 2 minutes
public void cacheRefresh() {
    log.info("Running cache invalidation task");
    try {

        pageService.evict();
    } catch (Exception e) {
        log.error("cacheRefresh failed: " + e.getMessage());
    }
}

}

Assicurarsi di aggiungere anche @EnableAsync @EnableScheduling alla classe Application per attivare questa funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top