一、在applicationContent.xml配置javaMail
<bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${邮箱服务地址}"></property>
<property name="port" value="25"></property>
<property name="username" value="${发送方邮箱}"></property>
<property name="password" value="${密码}"></property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">3000</prop>
</props>
</property>
</bean>
二、编写发送邮件的组建
public class EmailService {
private static final Logger log = LoggerFactory.getLogger(EmailService.class);
@Autowired
private JavaMailSenderImpl javaMailSender;
/**
* 发送邮件
* @param subject
* @param content
* @param to
*/
public void sendMail(String subject, String content, String... to) {
log.info("send email subject:{}, to:{}, subject:{}", subject, to, content);
MimeMessage objMimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(objMimeMessage, true, "utf-8");
try {
helper.setFrom(javaMailSender.getUsername(),"XX异常");
} catch (UnsupportedEncodingException e) {
helper.setFrom(javaMailSender.getUsername());
}
helper.setSubject(subject);
helper.setTo(to);
helper.setText(content,true);
} catch (MessagingException e) {
log.error("发送邮件出错.",e);
}
javaMailSender.send(objMimeMessage);
}
}
三、配置异常捕获类
/**
* 自定义的全局异常处理类
*/
public class CustomMappingExceptionResolver extends SimpleMappingExceptionResolver implements HandlerExceptionResolver{
private static Logger logger = LoggerFactory.getLogger(CustomMappingExceptionResolver.class);
@Autowired
private ExceptionCacheService exceptionCacheService;
/**
* 这里异常信息记录到cache中, 然后启动一个任务去查询cache中是否有异常信息;有则发送邮件
* 如果不放cache可以直接发送邮件
* @param request
* @param response
* @param handler
* @param ex
* @return
*/
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
exceptionCacheService.doExceptionStore(ex);
if (ex.getClass().getName().equals("org.apache.catalina.connector.ClientAbortException")) {
return super.doResolveException(request, response, handler, ex);
}
logger.error("请求悲剧了!!", ex);
if (WebUtils.isAjaxRequest(request)) {
ResponseEntity entity = ResponseEntity.failed();
entity.setMsg("服务器异常");
try {
WebUtils.writeJsonResponse(response, entity);
} catch (IOException e) {
logger.error("输出json居然也异常了!!", e);
}
return null;
} else {
return super.doResolveException(request, response, handler, ex);
}
}
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
ModelAndView mav = new ModelAndView();
mav.setViewName("500");
exceptionCacheService.doExceptionStore(ex);
return mav;
}
}
当然要配置该类
<bean class="com.xxx.handler.CustomMappingExceptionResolver" />