描述
在我们的项目中,总是有一些我们不可控制的异常,比如数据库连接不上,redis挂掉,以及一些代码上未可知的异常爆发,不能在项目上线时就可以统计出来,并且修复,所以当我们这些bug抛出异常时,或者在某些可控的严重异常需要推送邮件或者短信或者其他的通讯工具比如 钉钉或者飞书等,我们就需要这样的功能,这里提供一个邮件通知方法,当有未知异常或者被定义为严重异常的,就会给运维人员发送一个邮件进行通知,方便计时应对和问题定位。
解决方案
在springboot中的全局异常捕获处,对不可控异常拿到异常栈信息,进行异常msg的组装和通过freemarker模板进行渲染html文本,然后再把这个异常msg的html进行qq模式的email的发送,freemarker模板可以支撑字符串模板渲染,即渲染的模板字符串可以保存到数据库,也可以直接定义好xxx.ftl模板,都行,这里需要强调的是 渲染的模板字符串可以保存到数据库就更加灵活,可以设计一套freemarker模板的管理系统,比如,对自定义的freemarker模板配置后,保存到数据库,然后根据不同的用户或者企业或者业务,就可以从库中获取对应的freemarker模板,进行数据渲染html,再通过短信或者邮件或者钉钉,这样就实现了类似阿里或者腾讯等第三方的模板配置后进行消息推送的功能。
代码
代码组成包含有自定义的模板的工具jar包和邮件的springboot-starter,以及在微服务中对异常的处理,和调用邮件的消息封装以及模板的创建。
模板自定springboot-starter
详细代码:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>wlc-spring-boot-tools</artifactId>
<groupId>com.wlc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wlc-template</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<--freemarker依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<--spring-webmvc依赖,这里可以换成spring的ioc包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>