一、spring-boot-dependencies
1.简介
spring-boot-dependencies
是一个特殊的pom(project object model)文件,它由spring boot团队维护,其主要作用是为spring boot相关的依赖提供统一的版本管理。它定义了大量的依赖及其兼容版本,确保spring boot生态中的库能够协同工作。官方仓库地址:
https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/3.1.0/spring-boot-dependencies-3.1.0.pom(版本可依据具体项目要求更改)
2. 内容概览
在spring-boot-dependencies
中,主要包含以下内容:
- 依赖管理(dependency management):定义了spring boot项目常用的第三方库的版本号(如spring framework、jackson、log4j2、hibernate等)。
- 插件管理(plugin management):定义了一些maven插件的版本(如
maven-compiler-plugin
,maven-surefire-plugin
等)。 - 属性(properties):在
<properties>
标签下定义了大量依赖的版本号,然后通过属性引用来统一版本。
3.核心内容结构
4. 依赖树结构
spring-boot-dependencies
本身并不引入任何依赖,它只是声明依赖版本。当我们在项目中引入一个starter(比如spring-boot-starter-web
)时,maven会根据spring-boot-dependencies
中定义的版本去下载对应的依赖。
6. spring-boot-dependencies中的属性
在spring-boot-dependencies
的pom文件中,通过属性定义了各个依赖的版本。例如:
<properties> <activemq.version>5.16.5</activemq.version> <antlr2.version>2.7.7</antlr2.version> <appengine-sdk.version>1.9.88</appengine-sdk.version> <artemis.version>2.19.1</artemis.version> <aspectj.version>1.9.7</aspectj.version> <assertj.version>3.19.0</assertj.version> <atomikos.version>4.0.6</atomikos.version> <awaitility.version>4.1.0</awaitility.version> ... 更多属性 </properties>
然后在依赖管理中引用这些属性:
<dependencymanagement> <dependencies> ... <dependency> <groupid>org.apache.activemq</groupid> <artifactid>activemq-amqp</artifactid> <version>${activemq.version}</version> </dependency> ... </dependencies> </dependencymanagement>
6. 如何查看完整的依赖树?
在maven项目中,可以使用以下命令查看依赖树:
mvn dependency:tree
在gradle项目中,可以使用:
gradle dependencies
7. 依赖冲突解决
由于spring-boot-dependencies
已经管理了版本,通常不会出现版本冲突。但如果需要覆盖某个依赖的版本,可以在项目的pom.xml中显式声明该依赖并指定版本(会覆盖spring-boot-dependencies
中的版本)。例如:
<dependencies> <dependency> <groupid>com.fasterxml.jackson.core</groupid> <artifactid>jackson-databind</artifactid> <version>2.12.5</version> </dependency> </dependencies>
8.企业级实践建议
安全更新策略
版本锁定:在父 pom 中固定 spring boot 版本
<properties> <spring-boot.version>3.1.0</spring-boot.version> </properties>
漏洞扫描:定期检查依赖漏洞
mvn org.owasp:dependency-check-maven:check
增量更新:使用版本范围谨慎升级
<spring-boot.version>[3.0.0,3.2.0)</spring-boot.version>
通过 spring-boot-dependencies,spring boot 团队为开发者提供了:
- 经过严格测试的依赖兼容矩阵
- 一站式的版本管理入口
- 零配置的依赖冲突解决方案
- 灵活的版本覆盖机制
9. 总结
spring-boot-dependencies
是spring boot的版本管理pom,它统一管理了大量第三方依赖的版本。- 通过starter,我们可以轻松引入一组功能相关的依赖,并且这些依赖的版本都是经过测试兼容的。
- 依赖树结构清晰,可以通过maven或gradle命令查看。
- 在需要时,可以覆盖默认的依赖版本。
通过这种方式,spring boot极大地简化了依赖管理,让开发者可以专注于业务逻辑。
二、spring-boot-starter-parent
1.简介
首先,spring-boot-starter-parent
是一个父pom,它继承自spring-boot-dependencies
,并且添加了默认的构建配置。
下面详细说明其内容以及依赖树结构(注意:依赖树结构通常是指项目依赖的传递性依赖,但这里我们更关注的是父pom的继承结构和它带来的构建配置)。
2 .结构图
结构图:
项目pom -> 继承 spring-boot-starter-parent -> 继承 spring-boot-dependencies
项目pom -> spring-boot-starter-parent -> spring-boot-dependencies
构建配置的继承关系(非依赖树,而是pom继承关系)可以用下图表示:
具体内容:
- 继承
spring-boot-dependencies
:因此获得了所有依赖版本管理。 - 默认配置:包括资源过滤、插件配置(如
maven-compiler-plugin
,maven-jar-plugin
,maven-war-plugin
,maven-surefire-plugin
等)、资源文件处理(application.properties和application.yml的过滤)、默认的java版本和编码等。
3.主要内容
由于spring-boot-starter-parent本身是一个pom,我们可以查看其内容(以3.1.0版本为例):
官方地址:https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-parent/3.1.0/spring-boot-starter-parent-3.1.0.pom
该pom的主要部分如下:
- 继承spring-boot-dependencies:
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-dependencies</artifactid> <version>3.1.0</version> </parent>
- 定义属性(覆盖或新增):
<properties> <java.version>17</java.version> <!-- 默认java版本 --> <resource.delimiter>@</resource.delimiter> <!-- 资源过滤占位符分隔符 --> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <!-- 编码 --> <project.reporting.outputencoding>utf-8</project.reporting.outputencoding> <!-- 其他属性 --> </properties>
- 构建配置(build):
- 资源过滤配置:对src/main/resources和src/test/resources目录进行过滤,使用上面的占位符分隔符。
- 插件管理:配置了多个插件的默认行为。
- 插件配置:
maven-compiler-plugin
:设置源代码和目标的java版本。maven-failsafe-plugin
:配置测试运行。spring-boot-maven-plugin
:用于打包可执行jar。
- 资源过滤(resources):
默认配置了资源过滤,使得在资源文件中可以使用占位符(如@variable@)进行替换。
注意:spring-boot-starter-parent本身不包含任何代码,也不直接添加任何依赖(除了构建插件),它的主要作用是提供构建配置和依赖版本管理。
当我们创建一个项目并继承spring-boot-starter-parent时,项目的pom结构如下:
项目pom:
<project> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>3.1.0</version> </parent> ... 项目自己的定义 ... </project>
具体构建配置的内容:
在spring-boot-starter-parent中,配置了以下插件:
- maven-compiler-plugin:设置源代码和目标版本为${java.version}。
- maven-failsafe-plugin:默认使用junit,并配置了必要的参数。
- spring-boot-maven-plugin:用于打包可执行的jar或war。
- 其他插件:如maven-jar-plugin, maven-war-plugin等的基本配置。
另外,资源过滤配置如下:
<resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> <!-- 启用过滤 --> <includes> <include>**/application*.yml</include> <include>**/application*.yaml</include> <include>**/application*.properties</include> </includes> </resource> <!-- 其他资源目录,不启用过滤 --> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>**/application*.yml</exclude> <exclude>**/application*.yaml</exclude> <exclude>**/application*.properties</exclude> </excludes> </resource> </resources>
注意:在spring-boot-starter-parent中,资源过滤默认只针对application*.properties, application*.yml, application*.yaml文件。
4.总结:
spring-boot-starter-parent提供了:
- 依赖管理(通过继承spring-boot-dependencies)。
- 默认的构建配置(包括插件配置和资源过滤)。
- 默认的属性配置(如java版本、编码等)。
这使得开发者无需关心构建细节,只需关注业务代码。
示例:一个典型的spring boot项目的pom:
<project> <modelversion>4.0.0</modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>3.1.0</version> </parent> <groupid>com.example</groupid> <artifactid>myproject</artifactid> <version>1.0.0-snapshot</version> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies> </project>
在这个项目中,我们不需要指定依赖的版本,因为父pom已经管理了。同时,构建时使用的java版本、编码、资源过滤等都已经配置好。
注意:如果项目需要自定义父pom,则不能直接继承spring-boot-starter-parent,这时可以采用之前介绍的方式,通过dependencymanagement导入spring-boot-dependencies,并手动配置插件和资源过滤。
三、spring-boot-starter-web
1.简介
spring-boot-starter-web
是 spring boot 的核心 starter 之一,用于快速构建 web 应用程序。它提供了完整的 spring mvc 框架支持和内嵌 servlet 容器,让开发者能立即创建 restful 服务或传统 web 应用。
2.结构图
3.使用
自动配置行为
当检测到 spring-boot-starter-web 在类路径中时,自动触发以下配置:
1. servlet 容器配置
java @autoconfiguration @conditionalonwebapplication @enableconfigurationproperties(serverproperties.class) public class servletwebserverfactoryautoconfiguration { // 自动配置内嵌tomcat @bean public tomcatservletwebserverfactory tomcatservletwebserverfactory() { return new tomcatservletwebserverfactory(); } }
2. spring mvc 配置
@configuration @conditionalonclass(dispatcherservlet.class) @autoconfigureafter(servletwebserverfactoryautoconfiguration.class) public class webmvcautoconfiguration { // 配置视图解析器 @bean @conditionalonmissingbean public internalresourceviewresolver defaultviewresolver() { // ... } // 配置消息转换器 @bean public mappingjackson2httpmessageconverter mappingjackson2httpmessageconverter() { // ... } }
3. 默认行为
- 端口:8080
- 上下文路径:/
- 静态资源目录:
/static
/public
/resources
/meta-inf/resources - 错误页面:/error 自动映射
- json 支持:自动配置 jackson
替换tomcat:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions> <exclusion> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-tomcat</artifactid> </exclusion> </exclusions> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-jetty</artifactid> </dependency>
3.http处理流程
4.应用示例
1. 基本配置
server: port: 8081 servlet: context-path: /api tomcat: max-threads: 200
2. 静态资源配置
@configuration public class webconfig implements webmvcconfigurer { @override public void addresourcehandlers(resourcehandlerregistry registry) { registry.addresourcehandler("/custom/**") .addresourcelocations("classpath:/custom-static/"); } }
3. 拦截器配置
@configuration public class webconfig implements webmvcconfigurer { @override public void addinterceptors(interceptorregistry registry) { registry.addinterceptor(new loginterceptor()) .addpathpatterns("/api/**"); } }
4.restful服务开发
@restcontroller @requestmapping("/api/users") public class usercontroller { @getmapping public responseentity<list<user>> getusers() { // 返回200 ok + json列表 } @postmapping @responsestatus(httpstatus.created) public user createuser(@valid @requestbody user user) { // 参数自动验证 } }
5.全局异常处理
@controlleradvice public class globalexceptionhandler { @exceptionhandler(usernotfoundexception.class) public responseentity<errorresponse> handleusernotfound( usernotfoundexception ex) { return responseentity.status(httpstatus.not_found) .body(new errorresponse(ex.getmessage())); } }
6. 性能优化配置
spring: mvc: async: request-timeout: 5000 # 异步超时时间 servlet: multipart: max-file-size: 10mb max-request-size: 20mb server: compression: enabled: true mime-types: text/html,text/css,application/json
与其他 starter 的协作
@springbootapplication @enablejparepositories // 启用jpa @enablewebsecurity // 启用安全 public class fullstackapp { public static void main(string[] args) { springapplication.run(fullstackapp.class, args); } }
7.总结
性能特性
场景 | 默认配置 | 优化建议 |
---|---|---|
线程池 | tomcat 200线程 | 根据cpu核心数调整 |
连接超时 | 无限制 | 设置server.tomcat.connection-timeout |
响应压缩 | 关闭 | 开启server.compression.enabled=true |
静态资源缓存 | 关闭 | 添加cache-control头 |
json序列化 | 全字段序列化 | 使用@jsonview控制字段 |
通过 spring-boot-starter-web,开发者能够:
- 在 30 秒内创建可运行的 web 应用
- 获得生产就绪的 http 服务能力
- 自动处理 90% 的 web 开发通用配置
- 灵活扩展 mvc 功能
- 无缝整合 spring 生态系统组件
此 starter 将传统 spring mvc 应用的配置工作量减少 80%,同时保持完整的灵活性,是构建现代 java web 应用的基石。
到此这篇关于springboot项目构建时各种依赖详细介绍与依赖关系说明的文章就介绍到这了,更多相关springboot依赖内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论