零碎Spring Boot 学习笔记
[info]0.如何启动一个spring boot 项目[/info]
方法1 使用maven下的springboot插件启动项目: mvn spring-boot:run
方法2 mvn package; java-jar xxx.jar
运行
[info]1.spring boot 是如何加载运行的[/info]
spring boot 有个默认集成的插件 spring-boot-loader
,编译时会自动引入。jar中manifest定义了启动类为loader中的jarlauncher。
jarlauncher最终会执行项目的Applaication.class。
jarlauncher会通过替换jre内置的jar的url访问协议[org.springframework.boot.loader.har.hander
]实现处理一些class patch的问题,
毕竟springboot的jar执行的时候并不会解压到临时目录,且启动类和项目的主类完全不在一个目录里面,还将依赖的jar全部打包到了内部。不处理掉会无法访问项目的代码和依赖包。
或者说自定义了项目内的代码和资源文件的访问URL协议实现。
[info]2.web容器[/info]
spring boot可以无缝切换web容器,目前支持tomcat(默认) jetty undertow三种容器技术。
想要使用jetty或者undertow直接添加相关依赖starter包,并在spring-boot-starter-web
包中排除默认的spring-boot-starter-tomcat
包
[info]3.如何外置配置文件[/info]
springboot支持从以下路径读取配置文件:
- 当前目录下的/config目录
- 当前目录
- classpath里的/config目录
- classpath根目录
classpath指的是WEB-INF下的classes目录
结论:jar同目录新建一个config目录,然后配置文件放里面。
[info]4.理解 spring-boot-starter-parent[/info]
spring boot项目的pom文件,parent指向了spring-boot-starter-parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> </parent>
parent包本身只包含一个pom文件,没有任何代码。
这个pom文件主要包含内容如下(以2.2.0.RELEASE版本 为例)
1.指定默认的jdk版本1.8
2.设置这个parnet包的parent为spring-boot-dependencies(上层依赖)
3.设置了maven的编译配置 处理和打包了配置文件
4.配置了maven编译springboot项目需要的插件
[info]5.理解 spring-boot-dependencies[/info]
这个包也只有一个pom文件,主要是用来管理依赖的。dependencies的版本号与springboot的版本号一致.
里面包含了spring boot项目常用依赖组件的版本号,这些版本号都是与相应版本的springboot兼容的。
也是是以springboot的版本为核心,配置外围组件的版本。
2.2.0.RELEASE版本的dependencies一共配置了556个依赖版本。如果你添加的依赖包含在内则不需要添加版本号,否则则需要添加版本号。
[info]6.理解 spring-cloud-dependencies[/info]
该包依旧只包含了一个配置pom文件,他的parnet是spring-cloud-dependencies-parent
1.配置了多个不同spring版本的仓库[里程碑版本 正式发布版本 快照版本。。。]这种不同发布类型的版本放在了不同的仓库
2.配置了一堆spring cloud 相关组件的版本 比如openfeign sleuth,但不多,貌似只有自家的几个产品。
[info]7.理解spring-cloud-dependencies-parent[/info]
只包含了一个pom文件
1.配置了快照版本 里程碑版本 和 正式版本的仓库地址
2.配置了一个maven插件maven-enforcer-plugin(用来查看包的依赖关系数的)