2009-12-01 16 views
9

Tengo una aplicación de resorte que no está llamando métodos de destrucción de beans al apagar. He visto referencias a esto debido a la creación de instancias en un BeanRefFactory, y que esto se puede evitar llamando manualmente a registerShutdownHook() en el contexto de la aplicación. Este método parece haber desaparecido de la primavera entre las versiones 2.0 y 2.5.Registro de un gancho de cierre en Spring 2.5

¿Alguien puede indicarme cómo se hace ahora?

Gracias.

+0

¿Podría publicar un enlace a la descripción del problema inicial que describió? – skaffman

Respuesta

17

Este método todavía está disponible en e implementado por AbstractApplicationContext.

lo que podría ser capaz de hacer esto

ApplicationContext ctx = ...; 
if (ctx instanceof ConfigurableApplicationContext) { 
    ((ConfigurableApplicationContext)ctx).registerShutdownHook(); 
} 

Alternativamente, usted puede simplemente llamar ((ConfigurableApplicationContext)ctx).close() sí mismo mientras el cierre de la aplicación o el uso de su propio gancho de cierre:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run(){ 
     if (ctx instanceof ConfigurableApplicationContext) { 
      ((ConfigurableApplicationContext)ctx).close(); 
     } 
    } 
}); 
0

Tantas upvotes, pero la segunda afirmación es totalmente errónea, un system.exit en java terminaría la primavera antes de llegar a su cierre, el camino correcto es estas 4 formas

1 InitializingBean y de devolución de llamada DisposableBean interfaces de 2 otras interfaces Consciente de comportamiento específico 3 init personalizado() y destroy() de archivo de configuración de frijol 4 @PostConstruct y anotaciones @PreDestroy

Haga clic here!

Cuestiones relacionadas