1、创建自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RecordException { }
2、配置切面
@Slf4j
@Aspect
@Component
public class RecordAspect {
@Autowired
private ErrorRecordService recordService;
@Pointcut(value = "@annotation(com.ybm.annotation.RecordException)")
public void doOperation(){ }
@AfterThrowing(value="doOperation() && args(processDefinitionKey,businessKey,variables)", throwing ="ex", argNames = "ex,processDefinitionKey,businessKey,variables")
public void doAfterThrowing(Exception ex, String processDefinitionKey, String businessKey, Map<String, Object> variables){
log.error("异常信息", ex.getMessage());
ErrorRecord record = ErrorRecord.empty();
record.setBusinessKey(businessKey).setErrorInfo(ex.getMessage()).setCreateTime(OffsetDateTime.now()).setUpdateTime(OffsetDateTime.now());
recordService.save(record);
}
3、将注解加到方法上
@RecordException
public void startProcess(String processDefinitionKey, String businessKey, Map<String, Object> variables){}
注意:因为记录需要具体的的参数,所以抛异常的时候把参数加上去,参数和执行的方法中的参数需要一一对应。