spring—如何计算java批处理中捕获的异常数?

zlhcx6iw  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(384)

我有一个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

h5qlskok

h5qlskok1#

为什么需要在methodb中使用try-catch块而不是使用throw-exception方法签名

public void methodA(int param1, int param2) throws Exception{
   methodB();
}

public void methodB() throws Exception{

     //code here

}

因为您正在调用方法中捕获异常,所以应该具有主要的错误计数逻辑。不是在多个地方

try{
      //My code goes here
      methodA(param1,param2);
   } catch (Exception ex) {
        log.error(ex.getMessage(), ex);
        errors++;
   }

   if (errors > 0 ) {
     log.error(errors + " error(s) ocurred in the application");
  }
bzzcjhmw

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

相关问题