@PreDestroy Methode eines Feder-singleton-bean nicht aufgerufen
Ich habe eine Spring bean Definition in beans.xml
wie folgt:
<context:annotation-config />
[...]
<bean id="myBackend" class="mycompany.BackendBean" scope="singleton" />
Innerhalb der bean sind 2 Methoden, die ausgeführt werden müssen, zu Beginn und vor Beendigung der web-Anwendung:
public class BackendBean implements IBackend {
private static final Logger LOGGER = LoggerFactory
.getLogger(BackendBean.class);
@PostConstruct
public void init()
{
LOGGER.debug("init");
}
@PreDestroy
public void destroy()
{
LOGGER.debug("destroy");
}
}
Wenn ich den server (mvn jetty:run
), kann ich den Ausgang des init
Methode in der Konsole, aus der ich schließe, dass die init
- Methode ausgeführt wird.
Wenn ich drücken Sie Ctrl-C
und Steg beginnt zu heruntergefahren, kann ich nicht sehen, die Ausgabe der destroy
Methode.
Was sollte ich ändern, um für die destroy
Methode ausgeführt werden soll, wenn die Anwendung beendet wird?
- Sind Sie Planung, um führen Sie die Anwendung auf jetty? Oder Sie müssen mehr Container?
- Ich bin mit Steg für schnelle tests nur. In der Produktion bin ich mit Apache Tomcat 7.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den Frühling zu rufen
@PreDestroy
callback-Methode, wenn Sie die Anwendung beendet, Sie haben, um einen shutdown-hook und schließen Sie die Anwendung Kontext Sie in. Sie könnten hängen Sie den Haken JVM mitRuntime.getRuntime().addShutdownHook(Thread)
oder Jetty, wenn es bietet eine solche API. Hier ist, wie Sie es tun würde, mit JVM shutdown-hook:appContext.registerShutdownHook()
für, die.Wenn Sie
@Scope("prototype")
in Ihrer Klasse @PreDestroy nicht funktioniert, obwohl, wenn Sie versuchen, schließen Sie mitcontext.close();
odercontext.registerShutdownHook();
Ich weiß nicht, warum Sie wollen
Spring
zu kümmern. Wenn ich das falsch verstanden, deine Frage kann man mit Container-Anwendung Lebenszyklus.Versuchen, schriftlich eine Lebenszyklus (jetty) und LifeCycleListener (tomcat) und überschreiben in
LifeCyle
onStart
undonStop
. Und arbeiten, eine ähnliche Lösung fürLifeCycleListener
im tomcat, wenn die entsprechenden event stattfindet.