2016-09-07 13 views
3

Ich versuche derzeit, eine Spring Boot-Anwendung in eine externe Tomcat-Instanz zu implementieren, und stoße auf einige Fragen, wie man die Instanziierung bestimmter Dinge am besten verwaltet.Bean Lifecycle Management Spring Boot

Wie derzeit strukturiert Ich habe etwas entlang der Linien von

public class MyClass extends SpringBootServletInitializer{ 


@Bean 
public ThreadPool pool(){ 
    return new ThreadPool(); 
} 

@Bean 
public BackgroundThread setupInbox() { 
    BackgroundThread inbox = new BackgroundThread(pool()); 
    inbox.start(); 
    return inbox; 
} 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(MyClass.class); 
} 

public static void main(String[] args) throws Exception { 
    SpringApplication.run(MyClass.class, args); 
} 


} 

wo BackgroundThread ein Thread ist, der für neue Arbeitsplätze zu einem AMQP Typ-Messaging-Warteschlange hört. Ich weiß, dass Spring einige RabbitMQ-Möglichkeiten anbietet, aber wir verwenden Rabbit nicht dafür, also hilft es nicht.

Der gesamte Zweck dieser * .war-Datei, die bereitgestellt wird, besteht darin, einige Funktionen der Leitung via Messaging verfügbar zu machen, also meine Frage ist, was der beste Weg ist, den BackgroundThread über den gesamten Lebenszyklus zu instanziieren, zu starten und dann zu zerstören Frühling? XML-Konfiguration?

+0

Möchten Sie sich einige Spring-Kontext-Lebenszyklusereignisse anhören und Ihren Thread auf ihnen verwalten? – jahra

Antwort

3

From the docs:

Die JSR-250 @PostConstruct und @PreDestroy Anmerkungen zur Aufnahme von Lifecycle-Rückrufen in einer modernen Frühling Anwendung im Allgemeinen am beste Praxis betrachtet. Wenn Sie diese Anmerkungen verwenden, sind Ihre Beans nicht an Spring-spezifische Schnittstellen gekoppelt.

For details see Section 7.9.8, “@PostConstruct and @PreDestroy”

Die Anmerkung soll auf einigen init und Reinigungsmethoden gesetzt werden:

@PostConstruct 
public void initAfterStartup() { 
    ... 
} 

@PreDestroy 
public void cleanupBeforeExit() { 
    ... 
} 

Ebenfalls nützlich:

Jede SpringApplication einen Shutdown-Hook mit dem Register JVM, um sicherzustellen, dass der ApplicationContext beim Beenden ordnungsgemäß geschlossen wird. Alle standardmäßigen Spring-Lifecycle-Callbacks (z. B. die DisposableBean-Schnittstelle oder die @ PreDestroy-Annotation) können verwendet werden.

Darüber hinaus können Beans die Schnittstelle org.springframework.boot.ExitCodeGenerator implementieren, wenn sie beim Beenden der Anwendung einen bestimmten Beendigungscode zurückgeben möchten.

Verwandte Themen