1.因为springboot启动后会加载所用的配置文件,所以我们可以在main方法下写DingTalk的bean来注入DingTalk配置。
@ServletComponentScan public classApplication { //DingTalk Bean变量 private static String DING_TALK_UTIL_BEAN = "dingtalkUtil"; public static voidmain(String[] args) { //new SpringApplicationBuilder(Application.class).initializers(new AqumonApplicationContextInitializer()).run(args); ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args); ConfigurableListableBeanFactory beanFactory =applicationContext.getBeanFactory(); //获取DingTalk Bean DingtalkUtil dingTalk =(DingtalkUtil) beanFactory.getBean(DING_TALK_UTIL_BEAN); //发送DingTalk通知 dingTalk.sendTextNotificationToAccountInfo("INFO:Account启动完成"); } }
2.DingTalk相关工具类及其方法:
@Data public classDingtalkUtil { Logger logger = LogManager.getLogger(DingtalkUtil.class); privateURI WEBHOOK_URL_ACCOUNT; privateURI WEBHOOK_URL_ACCOUNT_INFO; publicDingtalkUtil(DingtalkConfig dingtalkConfig) { try{ WEBHOOK_URL_ACCOUNT = newURI(dingtalkConfig.getAccountUrl()); WEBHOOK_URL_ACCOUNT_INFO = newURI(dingtalkConfig.getAccountInfoUrl()); } catch(URISyntaxException e) { logger.fatal("Failed to parse URI of reminder webhook, due to: " +e.getMessage()); } } /*** 发送文本提醒至Account警告群 * * @parammsg 信息 */ public voidsendTextNotificationToAccount(String msg) { sendTextNotification(msg, WEBHOOK_URL_ACCOUNT); } /*** 发送文本提醒至Account通知群 * */ public voidsendTextNotificationToAccountInfo(String msg) { sendTextNotification(msg, WEBHOOK_URL_ACCOUNT_INFO); } /*** 发送文本提醒至任意机器人 * * @parammsg 信息 * @paramwebhookUri 机器人的webhook地址,新的地址可在上面添加为常量 */ public voidsendTextNotification(String msg, URI webhookUri) { RestTemplate restTemplate = newRestTemplate(); restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); HttpHeaders headers = newHttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<String> entity = new HttpEntity<String>(buildJsonTextMessage(msg, false), headers); HttpEntity<String> response = restTemplate.postForEntity(webhookUri, entity, String.class); logger.info("Response: " +response.getBody()); } /*** 创建文本提醒Body * * @parammsg * @paramisAtAll * @return */ public String buildJsonTextMessage(String msg, booleanisAtAll) { StringBuilder sb = newStringBuilder(); String atAll = isAtAll ? "true" : "false"; sb.append("{ "msgtype": "text", "text": { "content": "" + msg + ""}, "isAtAll": " + atAll + "}"); returnsb.toString(); }