Spring Boot集成Arthas,方便诊断应用
作为Java开发者,大部分人应该都知道arthas
这款神奇,不得不说,这工具确实为我们在诊断Java程序时带来了莫大的便利。一般我们在诊断进程时,是采用独立的arthas
jar文件,attach
进程的方式来运行。官方其实还给我们提供其他的用法,这里,我们就来尝试集成到应用程序中。
作为Java开发者,大部分人应该都知道arthas
这款神奇,不得不说,这工具确实为我们在诊断Java程序时带来了莫大的便利。一般我们在诊断进程时,是采用独立的arthas
jar文件,attach
进程的方式来运行。官方其实还给我们提供其他的用法,这里,我们就来尝试集成到应用程序中。
在我们平时的单体服务中,每次发版升级服务时,都会有不定时的停机服务时间,这种方式给用户带来极为不好的体验,用户用着用着,怎么突然访问不到了。随着K8S的兴趣,我们也顺应趋势,落地到生产上,基于K8S确实也给我们带来了方便,最显著的就是平滑发布、动态扩容。
这个程序有些时日没有动过了,在之前,一切都非常正常。在今日,我准备优化一下之前的一个接口,在DEBUG之时,突然给我带来一个'惊喜'
,在用Mybatis
查询时,报错了。
在之前,我们要重新部署Spring Boot
应用时,都是用简单粗暴的kill -9 PID
命令,这种方式的弊端很明显,假如应用内还有未处理完的业务,突然把应用给kill掉,这显然是出问题的。
在之前的系统,用户主要是经销商,用户数不多,数据量也不大,便采用了最简单的方式-定时扫描表,这种方式确实简单粗暴,如果要实时性较高,那么就只有频繁扫描表,这样就增加了数据库的压力,如果要减轻数据库压力,那么就只有降低扫描频率,这样就出现延迟很高。这次的新系统的用户和数据量较之前的系统就要多一些了,如果再使用之前的方式,不止数据库压力会很大,用户体验也不好。
在我们日常开发中,经常会遇到查询一对多的业务场景,比如:订单,用户权限,用户菜单,文章评论,以前没有用到ORM的时候,都是批量取出再重新匹配或者循环取出,这在代码里面实现起来还是有些繁琐。在现今Mybatis
、Hibernate
等ORM框架里,都给我们提供方便的一对多的映射功能,使得我们的开发效率得到了提高。今天,我们就来演示一下订单一对多的关系映射。
分页乃是我们日常开发中经常遇到的场景,在以前开发基本都是自己手写SQL来进行分页,现在,有很多贴心的大佬为了考虑得非常周到,便给我们提供了PageHelper
这个强大的开源分页组件,用起来真是不赖。
前面我们学习了用Mybatis提供的注解读取数据,但是有时候,一些较为复杂一点的SQL写在代码里面会显得比较乱也不太好管理。所以,有时候我会把一些比较复杂且长的SQL用一个XML文件来单独存放。
Mybatis和Hibernate是Java很常用的两款ORM框架,Hibernate框架,强大但是有些过重,Mybatis相对轻量级一些,总之这两种框架各有优劣势,在国内,Mybatis的使用率明显高于Hibernate。由于我也是比较倾向于自己写SQL,所以,在工作中,Mybatis用得较为多一些,某些项目也在使用Hibernate。虽然Mybatis用得较多,但是也只是会一些简单的单表增、删、改、查操作,没有进行深入,最近稍微时间充裕一些,便想着花点精力去学复杂一些的场景。
一般来说,我们会把Spring Boot打包成jar来部署,如果是直接打包成Jar的话,它会随着所添加的依赖而越来越庞大,当然,也可以打成war包,放在tomcat里来运行。