哥伦比亚大学(美国)校训:“借汝之光,得见光明。”
今天,陪着一群小伙伴爬了一座山,海坨山,说是避暑,结果化身小黑,有点中暑了,只能说现在咱们好一群的伙伴们身体素质确实差点意思了,走走停停,依然气喘吁吁。不过,今天还是蛮有点小收获,到达了山顶的观景台,腑撖了延庆的蜿蜒山脉;顺便到达了1743caffe咖啡馆,网红打卡地。据说1743caffe坐落海拔1742米,再加一米的情怀,故此由来。阿伦故事也是一家颇有温存的caffe馆,有知道的朋友欢迎评论区留言。。。
Springboot的核心机制包括四个方面:起步依赖/自动配置/CLI命令/Actuator监控,前两个机制没有多少可讲的点,主要是一些注意事项和工作中启动出现的错误如何快速排查和定位;后面两块专门分篇来讲解下,开启核心机制之旅。
一 起步依赖机制
前几年maven在国内还未火起来的时候,搭建一个工程最繁琐的就是选择jar包版本,解决依赖问题。那时,我们自己都会积累像Spring/hibernate等的核心包,以供新搭建项目之需。有了maven,包管理迈出了一大步,Spring一直致力于非自身业务化的简化,起步依赖和自动配置自然水到渠成。
起步依赖本质是一个maven项目对象模型(project object model,pom),定义了对其他库的传递依赖,这些依赖整合在一起可支持某项功能。我们根据起步依赖的名称基本可推断出它所支持的功能,这一点也是我们在工作中需要学习和积累的地方,也就是代码的可读性。另,我们在引入某项起步依赖的时候无需指定版本,因为这是由引入的Springboot版本决定的,请不要画蛇添足,带来不必要的麻烦。
这里说明两个工作中的注意事项:
1/由于包依赖具有传递性,当包冲突时,可通过IDE或命令(mvn dependency:tree)查看依赖树,对于冲突的包可在引用的时候使用<exclusions>,举例:
<dependency>
<groupId>org.xwz</groupId>
<artifactId>config-center</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</exclusion>
</exclusions>
</dependency>
2/重视dependency中属性optional的使用,它是解决依赖传递的一个重要举措。当包A引入了一个xxx.jar,当包A被包B引入,但不想让B引入xxx.jar,可以在包A引入xxx.jar的时候设置属性:<optional>true</optional>。在引入一些通用的common包/utils包之类,这个属性还是蛮有用的。
二 自动配置
想想在用Springmvc的时候,xml里面布满了各种bean的配置,现在忆起是不是有种想吐的感觉,Springboot搭建的时候完全不需要,一个properties或者yml就搞定,完全摆脱了xml配置,使用注解声明依赖关系,一切交给Spring,生死由命,哈哈。。。。
自动配置是指程序启动的时候,Springboot考虑安全/集成/持久化/web等各方面因素,决定配置应该使用哪一个,如判断要加载的bean是不是在classpath中,该bean依赖的bean是否已经加载,加载的条件是否满足等等,在Actuator监控中我再详细展示下内部bean加载的情况以及依赖条件的判断等。
特此声明:
分享文章有完整的知识架构图,将从以下几个方面系统展开:
1 基础(Linux/Spring boot/并发)
2 性能调优(jvm/tomcat/mysql)
3 高并发分布式
4 微服务体系
如果您觉得文章不错,请关注阿伦故事,您的支持是我坚持的莫大动力,在此受小弟一拜!
每篇福利:
网友评论