Ich versuche, meine Anwendung am Leben zu halten, um hören Sie für einige Nachrichten von meinem queue
. Sobald meine Anwendung jedoch eine SIGTERM
erhält, möchte ich sicherstellen, dass meine Anwendung ordnungsgemäß heruntergefahren wird. Stellen Sie sicher, dass die Jobs intern vor dem Herunterfahren zuerst beendet wurden.Wie Spring Bohnen richtig zu schließen, nachdem ein SIGTERM erhalten?
Nachdem darüber zu lesen, kam ich mit auf den Punkt:
@Component
public class ParserListenerStarter {
public static void main(final String[] args) throws InterruptedException {
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(ParserReceiveJmsContext.class);
context.registerShutdownHook();
System.out.println("Listening...");
Runtime.getRuntime().addShutdownHook(//
new Thread() {
@Override
public void run() {
System.out.println("Closing parser listener gracefully!");
context.close();
}
});
while (true) {
Thread.sleep(1000);
}
}
}
Dann sende ich eine kill
Befehl an meine Anwendung; und dies ist meine Ausgabe:
Listening...
// output from my other beans here
Closing parser listener gracefully!
Process finished with exit code 143 (interrupted by signal 15: SIGTERM)
Die shutdown
Methoden aus meinen Bohnen wurden nicht genannt:
@PreDestroy public void shutdown() {..}
Ich bin kein Experte in Spring
, so tue mir leid für jeden dummen Punkt, dass ich Ich vermisse hier.
Wie kann ich shutdown
meine Bohnen und dann meine Anwendung schön schließen?
Sie rechts Nikolay sind! Ich danke Ihnen sehr für Ihre Antwort! –