Question

Je veux courir en arrière-plan en parallèle avec mon application web printemps-mvc. Je besoin d'un moyen de démarrer automatiquement le chargement de contexte. processus d'arrière-plan est une classe qui implémente Runnable. Est-ce ressort mvc a des installations pour cela?

Était-ce utile?

La solution

Le printemps est un cadre d'exécution des tâches complète. Voir partie pertinente de la documentation .

Je suggère d'avoir un grain de printemps dans votre contexte, qui, une fois initialisé, soumet votre Runnable de fond à un grain de SimpleAsyncTaskExecutor. C'est l'approche la plus simple que vous pouvez rendre plus complexe et capable comme bon vous semble.

Autres conseils

J'aller de l'avant et consulter la documentation de planification des tâches liées par skaffman, mais il y a aussi une façon plus simple si tout ce que vous voulez vraiment faire est le feu un fil d'arrière-plan au moment de l'initialisation du contexte.

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

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

Une autre option, on peut désormais utiliser les capacités de planification de printemps. Avec Spring 3 ou plus, il a une annotation comme Cron vous permet de planifier des tâches à exécuter avec une simple annotation d'une méthode. Il est aussi amical avec autowiring.

Les horaires par exemple une tâche pour toutes les 2 minutes avec une attente initiale (au démarrage) de 30 secondes. La prochaine tâche sera exécutée 2 minutes après la méthode complète! Si vous souhaitez l'exécuter toutes les 2 minutes exactement, utilisez fixedInterval à la place.

@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());
    }
}

}

Assurez-vous d'ajouter également @EnableAsync @EnableScheduling à votre classe d'application pour activer cette fonctionnalité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top