简介
搭建日志系统的目的主要为了在生产环境下能够方便的查看多个项目的实时日记,增加开发效率。特别是在线上多台服务器部署时候,不用在登录服务器进入项目目录,通过 tail -f 等命令来查看日记了。
网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.现在咱们通过一个最简单的例子认识什么是InvocationHandler。值得一提的是,InvocationHandler在Spring框架实现中被广泛使用,这意味着我们吃透了InvocationHandler,就为将来的Spring源码学习打下一个坚实的基础。
JAVA GC(Garbage Collection,垃圾回收)机制是区别C++的一个重要特征,C++需要开发者自己实现垃圾回收的逻辑,而JAVA开发者则只需要专注于业务开发,因为垃圾回收这件繁琐的事情JVM已经为我们代劳了,从这一点上来说,JAVA还是要做的比较完善一些。但这并不意味着我们不用去理解GC机制的原理,因为如果不了解其原理,可能会引发内存泄漏、频繁GC导致应用卡顿,甚至出现OOM等问题,因此我们需要深入理解其原理,才能编写出高性能的应用程序,解决性能瓶颈。
想要理解GC的原理,我们必须先理解JVM内存管理机制,因为这样我们才能知道回收哪些对象、什么时候回收以及怎么回收。
在一些新增接口或者更新接口中,由于服务器可能反应稍微有点延迟,导致同一个操作被发送多次让服务器执行,为了实现接口的幂等性,使用redis锁来实现,为了方便在多个接口实现该功能,使用aop来实现加锁。
该方法适用于单个服务的项目。
【转】本文将介绍Linux下使用Shell处理文本时最常用的工具:
find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;
提供的例子和参数都是最常用和最为实用的;
对shell脚本使用的原则是命令单行书写,尽量不要超过2行;
如果有更为复杂的任务需求,还是考虑python吧;
使用execute到类的方法时遇到的问题:
- 不够灵活**,由于是以所有 Controller 方法中的方法为切面,也就是说切死了,如果说我们不想让某个接口打印出入参日志,就办不到了;
- Controller 包层级过深时,导致很多包下的接口切不到;
本文主要说说如何通过自定义注解的方式,在 Spring Boot 中来实现 AOP 切面统一打印出入参日志。
废话不多说,进入正题 !
此脚本用来管理 SpringBoot 项目的进程状态。有提示功能。把脚本丢到项目文件夹, 添加执行权限即可。
如果 jenkins 使用这个脚本, 需要在 java -jar 命令前添加 BUILD_ID=dontKillMe
, 不然 jenkins 会杀掉进程。