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 ?
Réponses
Trop de publicités?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>
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.
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
.