我想捕獲在我的應用程序中發生的所有異常/錯誤。
因此,我搜索了stackoverflow,並在這個問題上遇到了問題:Java Exception Listener
現在我想知道這是否可以以更好的方式完成。Spring Java Exception Listener without web
我當前的應用程序:
我使用與Spring JPA Spring框架在獨立代碼沒有 Web組件。我有一個Config.java
文件有四個主要的豆類:
- 時間韋弗
- 數據源
- 實體管理器工廠
- 事務管理
現在我認爲我可能會使用的東西如下所示:
package me.test;
import java.beans.ExceptionListener;
import org.springframework.stereotype.Component;
@Component
public class ErrorListener implements ExceptionListener {
@Override
public void exceptionThrown(Exception e) {
System.out.println("Some error occured ... That's bad :(");
}
}
我不確定這ExceptionListener
是否像我想讓他工作一樣,所以我想也許有人可以向我解釋,如果我想要的可能或不可能。
也許不是用這個監聽器,而是用其他方法?
另外還有其他一般問題:
我該如何註冊一個聽衆?是不是也有一個@EventListener
詮釋?我是否必須在一個方法之前放置它,然後讓它作爲Component的一部分通過彈簧進行掃描?
或者我必須在我的上下文中手動註冊嗎?
謝謝:)
---編輯---
與AfterThrowing
這個想法似乎很不錯(見下面的評論)。現在我的項目是這樣的:
:
new AnnotationConfigApplicationContext(Config.class);
Config.java
@EnableTransactionManagement
@ComponentScan("me.test.*")
@Configuration
@EnableJpaRepositories
@EnableAspectJAutoProxy
public class Config {
@AfterThrowing(pointcut = "execution(public * *(..)", throwing = "ex")
public void doRecoveryActions(DataAccessException ex) {
System.out.println("Error found");
}
/* loadTimeWeaver, dataSource, entityManagerFactory and transactionManager with the "@Bean" annotation */
}
,然後在隨機文件的東西,拋出一個錯誤,如int i2 = 5/0;
,並在其他級別throw new Exception("test");
。
但不幸的是它也沒有工作:(
我在做什麼錯?
我已經想過這個問題,但' @ Around'需要一個函數作爲參數,那麼我怎麼才能完成一個函數,這個函數在拋出異常時執行,無論在哪裏? – christopher2007
你可以做的是如下
@Aspect public class AfterThrowingExample { @AfterThrowing( pointcut="execution(public * *(..)", throwing="ex") public void doRecoveryActions(DataAccessException ex) { // ... } }
–基本上如果有公共方法拋出異常執行建議方法。您可以根據您的要求更改切入點 –