1.前言 AOP切面技术,大家应该都听知道,Spring框架的主要功能之一. AOP切面的用途很广,其中一个常见的用途就是打印接口方法的运行日志和运行时间. 日志对于一个项目很是重要,不仅有助于调错,还是后期大数据分析的重要数据来源,这里我就简单介绍一下如何在SpringBoot中利用AOP切面打印后端接口的运行情况. 2.切面代码 实现方式很简单,在SpringBoot工程中,增加切面类,代码如下: import cn.zhuifengren.util.JsonUtils; import or…
场景1:利用CocoaPods,在项目中导入AFNetworking类库 AFNetworking类库在GitHub地址是:https://github.com/AFNetworking/AFNetworking 为了确定AFNetworking是否支持CocoaPods,可以用CocoaPods的搜索功能验证一下.在终端中输入: $ pod search AFNetworking 过几秒钟之后,你会在终端中看到关于AFNetworking类库的一些信息. 这说明,AFNetworking是支持…
一.使用背景 开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用 ELK 来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,由于大量的其他用户/其他线程的日志也一起输出穿行其中导致很难筛选出指定请求的全部相关日志,以及下游线程/服务对应的日志. 二.解决思路 每个请求都使用一个唯一标识来追踪全部的链路显示在日志中,并且不修改原有的 使用Logback的MDC机制日志模板中加入traceId标识,取值方式为%X{traceId} MDC(Mapped Diagnost…
因为不知aop能干嘛,因此用aop做个小功能,再结合最近学的springboot-Email做了个系统异常自动邮件通知的功能, 感觉满满的成就感. AOP不懂的可以看上一篇:https://www.cnblogs.com/zgq7/p/11310142.html spring-email不懂的看上一篇:https://www.cnblogs.com/zgq7/p/11314895.html 先看看这个功能的总体规划图: 因此需要思考的是: 1:如何捕获异常? 总不能在每个会发生异常的地方写 th…
1. JAVA异常处理 在面向过程式的编程语言中,我们可以通过返回值来确定方法是否正常执行.比如在一个c语言编写的程序中,如果方法正确的执行则返回1.错误则返回0.在vb或delphi开发的应用程序中,出现错误时,我们就弹出一个消息框给用户. 通过方法的返回值我们并不能获得错误的详细信息.可能因为方法由不同的程序员编写,当同一类错误在不同的方法出现时,返回的结果和错误信息并不一致. 所以java语言采取了一个统一的异常处理机制. 什么是异常?运行时发生的可被捕获和处理的错误. 在java语言中,…
文章涉及内容来源:黑马程序员自学整理的笔记,网上查阅资料,以及转载名为墨钺的博客大佬,附上博客转载地址:https://www.cnblogs.com/gothic-death/p/9946415.html 在说java异常处理情况之前简单说下:java中异常的定义. java程序在运行时出现的不正常情况称之为异常.为了防止此类情况发生后及时处理该异常,java将所有可能发生异常的情况用类的形式进行描述和封装.描述不正常情况的类称为异常类.以前正常流程代码和问题处理代码相结合,现在将正常流程代码…
可能遇见的异常或错误: 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的.例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略. 运行时异常: 运行时异常是可能被程序员避免的异常.与检查性异常相反,运行时异常可以在编译时被忽略. 错误: 错误不是异常,而是脱离程序员控制的问题.错误在代码中通常被忽略.例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的. 异常总结: NullPointerException - 空指针引用异常Cla…
NO.1 java.lang.NullPointerException 这个异常比较容易遇到,此异常的解释是“程序遇上了空指针”,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,刚开始学习编程的朋友经常犯这个错误,当然我也不例外,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还…
异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"?"异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序.同步调用下面通过一个简单示例来直观的理解什么是同步调用:定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) @Componentpubli…
创建services文件夹 1.文件夹apis.index.request的三个文件. 2.apis文件放接口 export const apis = { checkDeviceNo: '/api/client/getEquipmentCode',//检查设备码是否存在 getSystemInfo: '/api/client/system/info',//登录二维码 heartbeat: '/api/client/heartbeat',//心跳检测 login: '/api/client/log…