Ich habe eine Spring Bean in beans.xml
wie folgt definiert:
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?
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:
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 LifeCyle
onStart
und onStop
. Und arbeite eine ähnliche Lösung für LifeCycleListener
in tomcat, wenn die entsprechende Ereignis findet statt.