@PreDestroy-Methode einer Spring-Singleton-Bean wurde nicht aufgerufen

8

Ich habe eine Spring Bean in beans.xml wie folgt definiert:

%Vor%

Innerhalb der Bean gibt es zwei Methoden, die beim Start und vor Beendigung der Webanwendung ausgeführt werden müssen:

%Vor%

Wenn ich den Server starte ( mvn jetty:run ), kann ich die Ausgabe der Methode init in der Konsole sehen, aus der ich schließe, dass die Methode init ausgeführt wird.

Wenn ich Ctrl-C drücke und Jetty heruntergefahren wird, sehe ich die Ausgabe der Methode destroy nicht.

Was muss ich ändern, damit die Methode destroy ausgeführt wird, wenn die Anwendung beendet wird?

    
DP_ 04.05.2013, 10:27
quelle

2 Antworten

8

Damit Spring die @PreDestroy -Rückrufmethode aufruft, wenn Sie die Anwendung herunterfahren, müssen Sie einen Shutdown-Hook hinzufügen und den Anwendungskontext schließen. Sie können den Hook über Runtime.getRuntime().addShutdownHook(Thread) oder Jetty an JVM anhängen solch eine API. Hier ist, wie Sie es mit JVM Shutdown-Hook tun:

%Vor%     
Abhinav Sarkar 04.05.2013, 10:56
quelle
0

Ich weiß nicht, warum Sie Spring darauf achten sollten. Wenn ich Ihre Frage nicht falsch verstanden habe, können Sie mit dem Lebenszyklus der Containeranwendung fortfahren.

Versuchen Sie, eine LifeCycle (Anlegestelle) und LifeCycleListener (tomcat) und überschreiben in LifeCyle onStart und onStop . Und arbeite eine ähnliche Lösung für LifeCycleListener in tomcat, wenn die entsprechende Ereignis findet statt.

    
ssedano 04.05.2013 10:36
quelle

Tags und Links