Je dois 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? Modifier: un inconvénient si j'utilise le crochet d'arrêt jvm?arrêt de fermeture pour l'application web java
Répondre
Utiliser 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 faire spécifiquement lors de l'arrêt? Et avez-vous vraiment besoin de pour l'enregistrer (comme dans "est-ce absolument critique?") Ou comme à (comme dans "serait bien mais je vais vivre sans")?
La distinction est importante - peu importe la méthode que vous essayez (auditeur servlet/contexte tel que suggéré par d'autres réponses ou JVM shutdown hook) il y a aucune garantie qu'il sera effectivement invoqué.
Les événements de destruction de l'écouteur de servlet/contexte ne sont 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 serait également déclenché pendant l'interruption du processus; cependant tuer un processus (ou couper le pouvoir) ne déclencherait évidemment aucun des deux.
Il est dans la catégorie "serait bien mais je vais vivre sans". Je dois enregistrer un tas de statuts de serveurs que mon application tente de se connecter à un fichier (et non pas db) lorsque l'application est arrêtée, puis recharger ces informations lorsque l'application est relancée. Si mon application tente de se connecter à un serveur et qu'elle est en panne, elle le marque comme étant désactivé afin de ne pas devoir réessayer. Étant donné que les requêtes se produisent souvent, je ne marque ces états qu'en mémoire, pas dans le fichier. Par conséquent, lorsque l'application est arrêtée, il serait bon de se rappeler quels serveurs sont en panne. – user121196
Je me penche vers ServletContextListener ou JVM hook – user121196
N'utilisez pas un hook JVM - c'est plus pour Tomcat lui-même, ou pour les applications de bureau. Vous devriez certainement préférer un ServletContextListener sur un hook JVM. –
Je suggère d'utiliser ehcache pour mettre en cache cette information. Si vous utilisez le stockage persistant d'ehcache, lorsque vous redémarrerez Tomcat, les données mises en cache seront toujours disponibles. En effet, cela délègue le problème à ehcache, qui est optimisé pour ces types de problèmes.
En complément à la réponse de leonm:
Si vous utilisez Spring, vous pouvez utiliser « la gestion du cycle de vie » de printemps pour obtenir un effet similaire. Par exemple, vous pouvez annoter une méthode dans un bean avec @PreDestroy
pour l'appeler automatiquement lors de l'arrêt du conteneur. De cette façon, vous n'avez rien à ajouter dans le web.xml
.
- 1. Arrêt de Rails pour Rails
- 2. Eclipse: arrêt du code (java)
- 3. Arrêt Visual Studio de la fermeture du programme après la fin
- 4. Arrêt automatique de l'application avant le test sur le Web
- 5. Arrêt de Python incorporé
- 6. Arrêt d'un test Web en cas d'échec d'une règle d'extraction
- 7. UIActivityIndicatorView marche/arrêt avant et après la demande page web
- 8. Fermeture de la connexion sur le client de service Web
- 9. Arrêt inattendu du client
- 10. Arrêt d'un HttpWebRequest asynchrone
- 11. Comment gérer un événement d'application de fermeture en Java?
- 12. arrêt reload pour ajax soumis sous forme
- 13. Détermination d'un arrêt ferme mon application
- 14. Bibliothèques graphiques Java pour applications Web?
- 15. Prise en charge JAVA pour Web sémantique
- 16. Arrêt UpdatePanel inactif quand
- 17. Arrêt du serveur JBoss
- 18. prises de fermeture en python
- 19. arrêt .Net écouter prise
- 20. arrêt workflow sharepoint programatically
- 21. Arrêt en cours CAKeyframeAnimation
- 22. wxNotebook Bouton de fermeture?
- 23. Client de service Web Java:
- 24. paramètres de fermeture groovy
- 25. Meilleure bibliothèque de messagerie pour les applications Web Java
- 26. Initialisation Java Web App
- 27. musique Arrêt de flash de javascript événement
- 28. java web start JAVA_HOME
- 29. arrêt Threads au cours mixte géré/C++ non managé/arrêt de processus CLI
- 30. Arrêt System.Windows.SplashScreen avec WinForms de fermer l'application
** Encore plus facile maintenant ... ** L'annotation ['@ WebListener'] (http://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebListener.html) ajoutée à [Servlet 3.0 spec] (https://jcp.org/en/jsr/detail?id=315) vous donne maintenant ce comportement sans avoir la peine d'éditer le fichier web.xml. Voir cette illumination [réponse par BalusC] (http://stackoverflow.com/a/9186070/642706). –