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 cela peut-il être fait? Edit: tout inconvénient si j'utilise le crochet d'arrêt jvm?
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 avez-vous vraiment besoin de le sauvegarder (comme dans "est-ce absolument critique?") Ou aimeriez-vous à (comme dans "serait bien mais je vivrais sans")?
La distinction est importante - quelle que soit la méthode que vous essayez (servlet/écouteur de contexte comme suggéré par d'autres réponses ou hook d'arrêt JVM ) il n'y a aucune garantie qu'il sera effectivement invoqué.
Les événements de destruction de servlet/écouteur de contexte ne seraient déclenchés que lors de l'arrêt normal (gracieux) du conteneur OR lors du rechargement de l'application. le pouvoir) ne déclencherait évidemment aucun des deux.
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 dans un bean avec @PreDestroy
pour qu'il soit invoqué automatiquement à l'arrêt du conteneur. De cette façon, vous n'avez rien à mettre dans le web.xml
.
Je suggère d'utiliser ehcache pour mettre en cache ces informations. Si vous utilisez le magasin persistant d'ehcache, lorsque vous redémarrerez Tomcat, les données mises en cache seront toujours disponibles.
En fait, cela délègue le problème à ehcache, qui est optimisé pour ces types de problèmes.