cerrar el enlace para la aplicación web java

Necesito guardar algunos datos preferiblemente cuando se detiene la aplicación web java, o cuando se detiene tomcat. ¿Cómo se puede hacer esto? Editar: ¿algún inconveniente si uso el gancho de cierre de jvm?

Utilice una clase que implemente ServletContextListener en su web.xml:

   com.mycompany.MyClass   

¿Por qué quieres hacerlo específicamente durante el cierre? ¿Y realmente necesita guardarlo (como en “¿es absolutamente crítico?”) O le gustaría (como en “sería bueno pero viviré sin él”)?

La distinción es importante: no importa qué método intente (servlet / listener de contexto como lo sugieren otras respuestas o el cierre de JVM ) no existen garantías de que se invoque realmente.

Los eventos de destrucción de escuchas de servlets / contextos solo se desencadenarían durante el apagado normal (elegante) del contenedor O durante la recarga de la aplicación. El gancho de cierre de JVM también se activaría durante la interrupción del proceso; sin embargo, matar un proceso (o cortar el poder) obviamente no desencadenaría ninguno.

Como una adición a la respuesta de leonm:

Si usa Spring, puede usar la “gestión del ciclo de vida” de Spring para lograr un efecto similar. Por ejemplo, puede anotar un método en un bean con @PreDestroy para que se invoque automáticamente al apagar el contenedor. De esta forma, no necesita poner nada en el web.xml .

Ver ciclo de vida de la fábrica de Spring Seils .

Sugiero usar ehcache para almacenar esta información en caché. Si usa el almacén persistente de ehcache, cuando inicie Tomcat nuevamente, los datos en caché seguirán estando disponibles.

En efecto, esto delega el problema a ehcache, que está optimizado para este tipo de problemas.