在做这个项目的期间,看到一篇很有启发性的文章《程序员你为什么这么累》。对于初级程序员来说,拿到需求,第一反应是用什么技术来尽快的完成任务,这本身并没有问题。但长此以往,不仅被需求的更改搞得疲惫不堪,更被重复的工作消磨了激情。如果你也有类似的烦恼,不妨看看此文,结合日常工作,体会下文中提到的先有思想再有技术


正文: 到目前为止,我们的项目线上运行良好,但每个人都知道,它一定有 bug。当异常产生,就需要及时去修复。然而我们不可能实时的查看日志,更不能寄期望于用户反馈。怎么办?我们需要程序替我们监控异常,一旦发生异常及时通知相关人员。 要怎么实现呢? 你可能想到,在业务类的每个方法中,捕获异常后发送消息通知相关人员。比如:
MyBusiness.java
````java
public class MyBusiness {
public void doSomething() {
try {
// 业务逻辑
} catch(Exception ex) {
sendMessageToBuddy(ex, "张三");
}
}
public void doSomething2() {
try {
// 业务逻辑
} catch(Exception ex) {
sendMessageToBuddy(ex, "张三");
}
}
...
} ````
相信你也闻到了代码的臭味道:大量与业务无关的重复代码;强耦合;不易维护。。。 所幸,使用 spring aop 可以帮助我们简化实现。(先有思想再有技术) ### 一看就懂的 AOP
初学 AOP,一定会被它复杂的概念迷惑,今天我们就来捋一捋,说点人话。 #### 什么是 AOP ?
**AOP:** Aspect Orient Programming,即面向切面编程。
**面向切面编程:**抽取重复代码,在运行时将它们动态的植入到业务方法上。
**作用:**让关注点代码与业务代码分离
**关注点:**即业务中的重复代码
**切面:**关注点代码行程的类,也叫切面类
**切入点:**
* 目标业务对象方法,动态植入切面代码
* 通过*切入点表达式*,指定拦截哪些类的哪些方法;给指定的类在运行时,植入切面类代码
**切入点表达式:**指定哪些类的哪些方法被拦截 #### 使用 spring aop
在 spring boot 框架上使用 spring aop 非常简单,只需要:
1) 在 pom.xml 文件中导入 spring-boot-starter-aop
2) 新建切面类,使用注解 @Aspect 和 @Component 即可 下面是演示代码:
1. pom.xml 导入 spring-boot-starter-aop
````xml
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
...
````
2. 新建切面类 WebExceptionAspect.java
````java
@Aspect
@Component
@Slf4j
public class WebExceptionAspect {
// 一旦 com.hbgj.happy.wiki.controller.HappyWiki 类中的方法抛出异常,就会执行 doAfterThrowingAdvice 方法
@AfterThrowing(value = "execution(public * com.hbgj.happy.wiki.controller.HappyWiki.*(..))", throwing = "ex")
public void doAfterThrowingAdvice(JoinPoint joinPoint, Throwable ex) {
// 组装错误信息,你也可以做其他任何事情
String message = "[error] " + joinPoint.getSignature().getName() + "\n[message] " + ex.getMessage();
log.error(message); sendMessageToBuddy(message , "张三");
}
}
````
运行项目,剩下的交给 spring。 就这样,我们在不侵入任何业务代码的情况下,完成了任务,是不是很简单? **总结**
使用 spring aop,我们只需要关心切面类、编写切面表达式指定切入点(指定目标类的方法)两件事。有了以上基础,写一两个切面类体会体会,再去看文档,相信会更加容易。

spring boot 从开发到上线(三)—AOP 异常监控、上报的更多相关文章

  1. Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件

    1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...

  2. Spring boot+CXF开发WebService

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

  3. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  4. spring boot + vue + element-ui全栈开发入门——spring boot后端开发

    前言 本文讲解作为后端的spring boot项目开发流程,如果您还不会配置spring boot环境,就请点击<玩转spring boot——快速开始>,如果您对spring boot还 ...

  5. Spring boot+CXF开发WebService Demo

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

  6. Spring Boot干货系列:(三)启动原理解析

    Spring Boot干货系列:(三)启动原理解析 2017-03-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说 ...

  7. 10个Spring Boot快速开发的项目,接私活利器(快速、高效)

    本文为大家精选了 码云 上优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等,希望能够给大家带来一点帮助:) 1.项目名称:分布式 ...

  8. 【SpringBoot】Spring Boot,开发社区讨论交流网站首页。

    初识Spring Boot,开发社区讨论交流网站首页. 文章目录 初识Spring Boot,开发社区讨论交流网站首页. 1.项目简介 2. 搭建开发环境 JDK Apache Maven Intel ...

  9. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

随机推荐

  1. 华为方舟编译器 下载 和 LiteOS Studio Setup 2019-04-16.exe SDK下载

    华为方舟编译器是首个取代Android虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译为机器码.此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率. 编译器下载 [Ark] ...

  2. 数据库xp_cmdshell使用

    首先也开启组件. sp_configure reconfigure go sp_configure reconfigure go 删除本地文件,注意是删除数据库所在的服务器的本地文件. exec ma ...

  3. Redis安装和基本使用

    目录 Redis安装和基本使用 安装 配置 启动服务端 启动客户端 Redis键(key) 与键相关的基本命令 Redis字符串 常用字符串命令: Redis哈希 常用Hash命令 Redis 列表( ...

  4. 双栈(Dual Stack)

    参考博客: 双栈数据结构: https://blog.csdn.net/hebtu666/article/details/83011115 https://blog.csdn.net/cainv89/ ...

  5. String类常用功能

    String类常用功能 判断: boolean equals(Object obj) boolean equalsIgnoreCase(String str) //忽略大小写 boolean star ...

  6. XSS相关Payload及Bypass的备忘录(上)

    翻译学习准备自用,同时分享给大家, 来自于: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injecti ...

  7. Burp Suite渗透实战操作指南-上篇

    Burp必备知识 在介绍功能之前有必要让大家了解一些burp的常用功能,以便在使用中更好的发挥麒麟臂的优势. 1.1  快捷键 很多人可能都没用过burp的快捷键吧,位置如下,不说话,如果不顺手可以自 ...

  8. CDH5.13快速体验

    相对于易用性很差Apache Hadoop,其他商业版Hadoop的性能易用性都有更好的表现,如Cloudera.Hortonworks.MapR以及国产的星环,下面使用CDH(Cloudera Di ...

  9. 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。

    上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...

  10. MATLAB之心形图绘制

    一.静态心形图绘制 (1)效果展示 (2)静态心形原始代码 clc; clear all; ; % 均布三位坐标 x=-:; y=-:; z=-:; [x,y,z]=meshgrid(x,y,z); ...