我有一个java批处理进程,它应该在进程结束时打印java应用程序中捕获的异常数。
这是强制性的,因为客户需要它。
我找到了一个解决方案,但它似乎可以优化。
首先,我创建了一个int变量来计算捕获的所有错误。
int errors = 0;
然后,我放置了一个try/catch块,通过执行以下操作来捕获应用程序内部发生的每个异常:
try{
//My code goes here
methodA(param1,param2,errors);
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
errors++;
}
if (errors > 0 ) {
log.error(errors + " error(s) occurred in the application");
}
这是方法A,方法B和方法C:
public void methodA(int param1, int param2, int errors){
methodB(errors);
}
public void methodB(int errors){
try{
// using methodC result to do some other operations
String text1 = methodC(errors);
// more code here
}catch(Exception e){
//another code here
errors++;
}
}
public int methodC(int errors){
try{
//Calculate a String in textReturned variable
return textReturned;
}catch(Exception e){
//another code here
errors++;
return "";
}
}
在这之前一切都很好,但是你可以看到 try
阻止我呼叫 methodA(param1,param2, errors)
以及 errors
应该在方法内部以保持计数此方法内部的错误,并且此方法还调用其他方法,例如 methodB
以及 methodC
(在其他类中)。问题是我必须 errors
如果我想增加 errors
变量捕获所有应用程序中发生的任何异常时。
有没有更好的方法来统计java应用程序中捕获的所有异常?
顺便说一下,我正在使用SpringBatch 2.2.6
2条答案
按热度按时间h5qlskok1#
为什么需要在methodb中使用try-catch块而不是使用throw-exception方法签名
因为您正在调用方法中捕获异常,所以应该具有主要的错误计数逻辑。不是在多个地方
bzzcjhmw2#
如果要在每个
catch
block,我相信你可以使用面向方面的编程,特别是aspectj的handler
切入点。spring的aop不提供
handler
切入点,但spring确实与aspectj集成。请参见:https://docs.spring.io/spring-framework/docs/5.3.4/reference/html/core.html#aop-使用aspectj