web-dev-qa-db-fra.com

Exécution d'une classe Java Java au démarrage de l'application à l'aide de Spring MVC

Quelle est la meilleure façon d'exécuter une classe Java au démarrage de l'application à l'aide de Spring MVC?

35
storm_buster

Il n'y a pas nécessairement de "meilleure" façon. Comme d'habitude, il existe de nombreuses façons de le faire, et le "meilleur" est celui qui convient le mieux à votre projet:

  1. Utilisez init-method = "..." sur un élément bean en XML, comme l'a mentionné cjstehno
  2. Implémentez l'interface InitializingBean de Spring. Lorsqu'elle est déployée dans un ApplicationContext , la méthode afterPropertiesSet () sera appelée lors de la création du bean.
  3. Annoter une méthode sur un bean avec @ PostConstruct . Encore une fois, si elle est déployée sur un ApplicationContext, la méthode annotée sera appelée lors de la création du bean.
  4. Si votre bean est davantage un bean infrastructure à lier au cycle de vie Spring, implémentez ApplicationListener < ContextRefreshedEvent >. La méthode onApplicationEvent (..) sera appelée lors du démarrage de Spring et vous pourrez y faire tout le travail dont vous avez besoin.
63
Ryan Stewart

En supposant que votre contexte est chargé au démarrage, créez un bean dans votre contexte d'application Spring avec une méthode init explicitement indiquée dans la configuration XML (ou implémentez Springs InitializingBean). Si le chargement paresseux est activé, vous devrez vous assurer que ce bean n'est pas paresseux.

<bean name="starter" init-method="start" class="com.my.StarterBean" lazy="false" />

(veuillez revérifier les paramètres dans la documentation).

Si votre contexte n'est pas chargé au démarrage, vous pouvez enregistrer un écouteur de contexte de serveur (faisant partie de l'API Servlet, pas Spring).

22
cjstehno

Vous pouvez utiliser l'une des implémentations:

1) Implémentez l'interface InitializingBean. Cette approche est autorisée à charger tous vos beans, puis appelez la méthode afterPropertiesSet.

    @Override
    public void afterPropertiesSet() throws Exception {
        init();
    }

2) Utilisation de l'annotation du JSR-250 @PostConstruct. Cette approche n'attendra pas le chargement des haricots de printemps.

   @PostConstruct
    public void init() {

    }
6
user2675617