idea怎么查看jar里的类调用链
背景:跟踪EnableConfigurationPropertiesRegistrar代码时想要知道AnnotationMetadata实现类是哪个,ctl+alt+b出来有两个实现类,不知到底用的是哪个。依次点开实现类,并在类名处右键findUsages却都报没有使用,按道理spring不会创建一个不被使用的类,所以百度,搜到如下链接,原来是因为jar里的类调用链只能用source导入来看。
参考链接:https://zhidao.baidu.com/question/526442428445149405.html
docker运行tomcat和springboot war包
背景:在看docker学习视频,照着实验做,却发现总是报404。
解决:
-
容器内查看tomcat日志,报unsupported major.minor。
打包编译用的jdk8,宿主机也是jdk8,但是tomcat容器是7,重新docker pull tomcat:8-jre8就可以了。 -
docker run运行tomcat,报forwarding相差的warning。
修改一个内核参数,方法如下:
vi /etc/sysctl.conf,加一行命令,即net.ipv4.ip_forward=1。
重新启动network,即systemctl restart network。
查看是否修改成功,即sysctl net.ipv4.ip_forward,为1则表示修改成功。 -
上面两个问题解决后,还是404,记得在哪里看到过要加–privileged=true,加上后,访问OK。
docker cp a.war my_tomcat:/usr/local/tomcat/webapps/b.war 注意两边都是文件名,若容器内路径只写到webapps,则webapps文件夹将只有一个挂载进来的war包,原来的东西将清空,这不是我们想要的。另外访问的http路径项目名将由b决定,而不是原来的a。
宿主机防火墙关闭并disable,这就不说了,自己做实验,这样方便。项目中,不能这样粗暴解决,应在防火墙上开放相应端口。
Markdown绘制URL类图
习惯用Markdown做笔记,阅读源码的过程中想把理解的知识用URL组织串联起来,感觉更有全局感一些。
网上查找Markdown绘制URL类图的方法,发现如下几种方法:
-
PlantUML + Gravizo,PlantUML用于负责绘制命令,Gravizo负责解析,在线解析的话,就不用安装Gravizo,Gravizo是用于离线情况下的。发现有个小bug,多个抽象类生成图形时只能显示一个为A,其它都是C标志。
参考链接:https://blog.csdn.net/heqiangflytosky/article/details/77050849(PlantUML绘制UML类图)
https://plantuml.com/class-diagram(PlantUML官网)
缺点:虽然用代码生成图片,能反映版本迭代(图片是二进制不能反映两张图片有何具体不同点)。但是需要Markdown工具如Typora、Xmind能集成其解析引擎Gravizo。尝试了Typora中输入PlantUML命令,发现并不能识别。这样只能手动生成图片后插入,有更改时,需要重新生成,替换原有图片,不太方便。 -
mermaid命令绘制URL类图。可以参考csdn选择markdown写博客时的帮助文档里的插入UML图demo。(相比intellij生成的类图,可以自己添加更多关系,如依赖、关联、组合、聚合,因此推荐使用)
参考链接:
https://blog.csdn.net/m0_46183807/article/details/107327311 (mermaid的各种类型的模块对应各种类型的图)
https://blog.csdn.net/sinat_29047129/article/details/104061103(typora使用mermaid的链接总结)
- intellij生成类图的快捷键:ctrl + shift + alt + u(显示的继承关系,对于框架代码来说,调用关系也是需要关注的)
后记:mermaid绘制uml类图的虚线和实线在typora中显示的都是实线。由于接口有interface标记,因此继承和实现关系可以推断出来。但是关联和依赖关系推断不了,因此在使用时将依赖关系的线条上标记了dependency作为说明。