[英]How to make Spring Boot custom exception on startup not fatal?
問題:我正在使用 Spring Boot 1.4.3 (spring-boot-starter-web) 並在啟動時運行可能引發異常的方法。 目前,如果拋出異常,Spring 會關閉 Tomcat 並退出。 我怎樣才能使這個例外成為非致命的? 換句話說,我仍然希望網絡服務器繼續運行。
這是我的代碼:
@EventListener
public void runOnStartup(ApplicationReadyEvent event) {
do_stuff_that_might_runtime_exception();
}
但是,如果拋出我的自定義 RuntimeException,我會看到:
..[info] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@77d67cf3: startup date [Thu Jan 12 13:23:03 CST 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2df3b89c
..[info] o.s.c.support.DefaultLifecycleProcessor : Stopping beans in phase 0
..[info] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
..[info] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans
..[info] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@7b6860f9: startup date [Thu Jan 12 13:23:06 CST 2017]; parent: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@77d67cf3
..[info] o.apache.catalina.core.StandardService : Stopping service Tomcat
異常僅在未處理時傳播到調用者或前一個堆棧,並以類似的方式使堆棧冒泡,最終導致線程的運行方法或主方法,以防它在主線程上。
要中斷傳播鏈,請在堆棧之一上優雅地處理兩者之間的異常。 在當前情況下,理想的地方是將代碼包裝在保護塊中。
@EventListener
public void runOnStartup(ApplicationReadyEvent event) {
try {
do_stuff_that_might_runtime_exception();
} catch(RuntimeException runtimeException){
// Handle Exception Here
runtimeException.printStackTrace();
}
}
此外,始終確保您決定要處理的場景,並盡量避免通用異常捕獲,它們可能會導致不必要的邏輯掩蓋。 例如,如果您希望受保護的塊拋出 FileNotFoundException ,請嘗試僅捕獲 FileNotFoundException ,而不是 RuntimeException 或 Exception 或最壞的 Throwable 。 但是實現細節是開發人員選擇和需要的基礎。
看起來是您的代碼可能會拋出異常,因此您的代碼也必須捕獲異常,以便它不會展開調用堆棧。
@EventListener
public void runOnStartup (ApplicationReadyEvent event){
try {
do_stuff_that_might_runtime_exception();
} catch (Exception e) {
log.error("something occurred", e);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.