40 votes

crochet d'arrêt pour une application web java

J'ai besoin de sauvegarder certaines données de préférence lorsque l'application web java est arrêtée, ou lorsque tomcat est arrêté. comment faire ? Modifier : un inconvénient si j'utilise le crochet d'arrêt de jvm ?

55voto

leonm Points 4836

Utilisez une classe qui implémente ServletContextListener dans votre web.xml :

<web-app>
    <!-- Usual stuff here -->
    <listener>
        <listener-class>com.mycompany.MyClass</listener-class>
    </listener>
</web-app>

16voto

ChssPly76 Points 53452

Pourquoi voulez-vous le faire spécifiquement pendant l'arrêt ? Et voulez-vous vraiment besoin de pour le sauver (comme dans "est-ce absolument critique ?") ou voulez-vous comme (comme dans "ce serait bien, mais je vivrai sans") ?

La distinction est importante - quelle que soit la méthode utilisée (servlet / auditeur de contexte comme suggéré par d'autres réponses ou Crochet d'arrêt de la JVM ) il y a aucune garantie qu'il sera effectivement invoqué.

Les événements de destruction des servlets/écouteurs de contexte ne seraient déclenchés que pendant l'arrêt normal (gracieux) du conteneur OU pendant le rechargement de l'application. Le crochet d'arrêt de la JVM se déclencherait également lors de l'interruption d'un processus, mais l'arrêt d'un processus (ou la coupure de courant) ne déclencherait évidemment ni l'un ni l'autre.

11voto

sleske Points 29978

En complément de la réponse de Leonm :

Si vous utilisez Spring, vous pouvez utiliser la "gestion du cycle de vie" de Spring pour obtenir un effet similaire. Par exemple, vous pouvez annoter une méthode d'un bean avec la mention @PreDestroy pour qu'il soit invoqué automatiquement à l'arrêt du conteneur. De cette façon, vous n'avez pas besoin de mettre quoi que ce soit dans le champ web.xml .

Véase Cycle de vie de la fabrique de Spring beans .

3voto

Steve McLeod Points 19016

Je suggère d'utiliser ehcache pour mettre en cache ces informations. Si vous utilisez le magasin persistant de ehcache, lorsque vous redémarrez Tomcat, les données mises en cache seront toujours disponibles.

En effet, cela délègue le problème à ehcache, qui est optimisé pour ce type de problèmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X