为了能够验证Spring Boot应用程序的启动和关闭,我们希望配置一个startup.log和shutdown.log来捕获引导和关闭应用程序的事件。
启动所有内容:
Root WebApplicationContext: initialization completed in {x} ms
关闭以下所有内容:
Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@53bd8fca: startup date [Wed Aug 19 09:47:10 PDT 2015]; root of context hierarchy
到最后。
这是特定于容器的东西吗? (Tomcat vs Jetty vs Undertow)
答案 0 :(得分:5)
您可以创建一个监视ApplicationReadyEvent
和ContextStoppedEvent
的事件监听器,并记录您想要的任何内容。
@Service
public class Foo {
@EventListener
public void onStartup(ApplicationReadyEvent event) { ... }
@EventListener
public void onShutdown(ContextStoppedEvent event) { .... }
}
答案 1 :(得分:1)
您可以将EventListener与ApplicationReadyEvent和ContextStoppedEvent结合使用。
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.ContextStoppedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
class StartupShutdownEventListener {
@EventListener
void onStartup(ApplicationReadyEvent event) {
// do sth
}
@EventListener
void onShutdown(ContextStoppedEvent event) {
// do sth
}
}
注意:Stephane Nicoll提供的答案确实包含相同(正确)的信息,但我想提供一个有效的Java示例。
答案 2 :(得分:1)
我们使用@PostConstruct
和@PreDestroy
来记录启动和关闭:
package hello;
import java.util.Arrays;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
@PostConstruct
public void startupApplication() {
// log startup
}
@PreDestroy
public void shutdownApplication() {
// log shutdown
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}