@Component
public class DingJobAlarm implements JobAlarm {private static Logger logger = LoggerFactory.getLogger(DingJobAlarm.class);@Autowiredprivate RestTemplate restTemplate;@Value("${dingding.robot.webhook.url}")private String webhookUrl;@Overridepublic boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) {boolean alarmResult = true;// send monitor email 这里可以读取任务配置页面填写的告警邮箱内容,可以往多个钉钉群里推送告警// if (info != null && info.getAlarmEmail() != null && info.getAlarmEmail().trim().length() > 0) {if (info != null) {// if (!info.getAlarmEmail().contains("access_token")) {// return alarmResult;// }Set<String> dingWebhookSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));Map<String, Object> map = loadEmailJobAlarmTemplate(info, jobLog);// 发送钉钉消息 这里可以通过info.getAlarmEmail()传给多个 dingWebhookSet// for (String dingWebhook : dingWebhookSet) {try {restTemplate.postForEntity(webhookUrl, map, Object.class);} catch (Exception e) {logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e);alarmResult = false;}// }}return alarmResult;}private static final Map<String, Object> loadEmailJobAlarmTemplate(XxlJobInfo info, XxlJobLog jobLog) {HashMap<String, Object> map = new HashMap<>(2);/** 设置消息类型 **/map.put("msgtype", "text");/** 设置消息内容 内容中必须包含在钉钉机器人配置的关键字 -- start **/String content ="【告警信息】 \t\n" +// "负责人 : \t" + info.getAuthor() + "\t\n" +"任务id : \t" + info.getId() + "\t\n" +"任务名称 : \t" + info.getJobDesc() + "\t\n" +// "执行器名称 : \t" + info.getExecutorHandler() + "\t\n" +// "执行器ip : \t" + jobLog.getExecutorAddress() + "\t\n" +// "任务参数 : \t" + jobLog.getExecutorParam() + "\t\n" +"LogId : \t" + jobLog.getId() + "\t\n" +"TriggerMsg : \t" + jobLog.getTriggerMsg().replace("<br>", "\n").replace("<span style=\"color:#00c0ef;\" > >>>>>>>>>>>", "").replace("<<<<<<<<<<< </span>", "") + "\t\n" +"HandleCode : \t" + jobLog.getHandleMsg() + "\t\n" +"报警时间 : \t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\t\n";HashMap<String, String> cmap = new HashMap<>(1);cmap.put("content", content);map.put("text", cmap);/** 设置消息内容 -- stop **//** 设置是否@指定人-start*需要@群里用户时,注意xxl_job里面的任务负责人需要填写:姓名-手机号**/// Map<String, Object> atmap = new HashMap<String, Object>();// String[] authorList = info.getAuthor().split(",");// ArrayList arrayList = new ArrayList();// for (String author : authorList) {// if ("".equals(author) || author.split("-").length < 2) {// continue;// }// arrayList.add(author.split("-")[1]);// }// if (arrayList.size() > 0) {// atmap.put("atMobiles", arrayList.toArray());// map.put("at", atmap);// }/** 设置是否@指定人 --stop **/return map;}
}
钉钉机器人设置: