Scene: common exception handling, avoiding try {} catch () {} directly with the code cleaner
use:
1. Dependence:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2. Cut avoid direct method -> This uses a exceptionHandlerUtils, then sliced utils
exceptionHandlerUtils:
@Slf4j @Component public class ExceptionHandlingUtils { public void throwDAOException(Exception e){ e.printStackTrace(); log.error("Failed to operate booking into Mysql, caused by: {}",e.getMessage(),e); throw new DAOException(e.getMessage(),e); } public void printEmailException(Exception e,String subject, String to) { e.printStackTrace(); log.error("***EmailException,Failed to send email {} to {}***, caused by: {}",subject,to,e.getMessage()); } public void throwJSONConvertException(Exception e) { e.printStackTrace(); log.error("Exception encountered at read json tree, caused by: {}",e.getMessage(),e); throw new JSONConvertException(e.getMessage(),e); } }
3. AOP sections:
ExceptionHandlingAspect
@Aspect @Configuration @Slf4j public class ExceptionHandlingAspect { @Value("${mail.common.from}") private String from; @Value("${mail.common.to}") private String to; @Autowired private MesgHelper mesgHelper; /** * @param joinPoint * @param ex ,获取的异常 */ @AfterThrowing(pointcut = "execution(* com.icil.elsa.auo.common.util..*(..))", throwing = "ex") public void afterThrowingCommon(JoinPoint joinPoint, Throwable ex){ log.error("Exception was detected, caused by {}",ex.getMessage()); if(ex instanceof DAOException){ commonProcess(ex); } else if(ex instanceof RestClientException){ commonProcess(ex); } else if(ex instanceof ConnectionException){ commonProcess(ex); } } private void commonProcess(Throwable ex) { log.error("Processing exception with name {}",ex.getClass().getSimpleName()); Object[] paras = {DateUtils.getBeiJingDateLoc()}; String subject = mesgHelper.getMessage("exception.handling.common.subject", paras, null); String exSimpleName = ex.getClass().getSimpleName(); String body = ex.getMessage(); Object[] params = { exSimpleName, body}; String content = mesgHelper.getMessage("exception.handling.common.content", params, null); MailUtils.sendMail(to,from,subject,content); } }
4. Use:
try { //doing something }catch(Exception e ){ exceptionHandlingUtils.throwDAOException(e); }