目录
文章代码环境
JDK---17
SpringBoot---3.3.1
Maven---3.9.4
IDE:IDEA
学习建议
如果你正在学习JAVA后端开发,但还没有接触SpringBoot或只想快速构建一个SpringBoot项目,可以从"快速构建一个SpringBoot项目",开始学习.当然,在学习之前还是有一些前置知识需要学习,
例如:
反射
注解
JAVAWeb基础(HTTP请求,响应,Tomcat等)
Maven
如果你正在为面试做准备,请从"概述"开始
概述
Spring Boot 是由 Pivotal 团队开发的一款基于 Spring 框架的开源框架。
Spring Boot 具有诸多重要的功能。最重要的则是简化配置,大幅减少繁琐的 XML 配置,依靠约定优于配置原则和自动配置机制,使开发者更专注于业务逻辑。能够快速创建并启动可运行的应用,显著提高开发效率。自带嵌入式的 Web 服务器,像 Tomcat、Jetty 等,无需额外部署到外部服务器。通过 starter 依赖可方便集成各种常用库和框架,比如数据库连接的 JDBC、MyBatis ,缓存的 Redis ,消息队列的 RabbitMQ、Kafka 等。还提供了应用运行状态的监控和健康检查功能,有助于及时发现和解决问题。能方便地集成安全框架,实现身份验证和授权等安全功能,并且支持多种数据访问方式,包括关系型数据库和 NoSQL 数据库等。
Spring Boot 适用于多种应用场景,如构建微服务(将大型电商系统拆分为订单、库存、用户等服务)、快速开发高效的 Web 应用(包括企业级管理系统、博客平台、在线教育系统等)、为移动应用提供后端支持、构建数据处理和分析应用、创建供其他系统或应用调用的 API 服务,以及在云平台(如 AWS、Azure 等)上轻松部署和运行应用。
优点
简化配置,专注业务逻辑。
快速创建和启动应用,提高开发效率。
自带嵌入式 Web 服务器,无需额外部署。
方便集成各种常用库和框架。
提供监控和健康检查功能。
易于集成安全框架,实现安全功能。
支持多种数据访问方式。
快速构建一个SpringBoot项目
第一步:填写项目基本信息
第二步:添加依赖
第三步:刷新依赖
第四步:没有报错开始启动
第五步:测试服务器是否成功启动
SpringBoot项目目录介绍
SpringBoot的配置文件的种类
常用配置文件
application.properties
格式:基于键值对(key=value)的简单文本文件。
用途:用于配置应用程序的通用属性,如数据库连接、日志级别等。
特点:语法简单,易于理解和使用,但不支持复杂的数据结构
spring.application.name=test_demo
server.port=8081
application.yml / application.yaml
格式:基于YAML格式,一种易于阅读和书写的数据序列化格式。
用途:与application.properties类似,但支持更复杂的数据结构(如列表、映射等),且语法更简洁。
特点:易于阅读和维护,特别是对于复杂的配置信息。
#应用名称
spring:
application:
name: test_demo
#应用端口号
server:
port: 8081
特定场景的配置文件
bootstrap.properties / bootstrap.yml
用途:主要用于Spring Cloud Config配置中心,用于配置连接到配置中心的属性。
特点:这些配置文件在application配置文件之前加载,优先级更高,适用于需要预先加载配置的场景。
application-{profile}.properties / application-{profile}.yml
用途:用于配置特定环境的属性,其中{profile}可以是开发(dev)、测试(test)、生产(prod)等环境名称。
特点:这些文件中的配置将覆盖application.properties和application.yml中的相应配置,以实现不同环境下的配置隔离。
application.jar.properties / application.jar.yml
用途:用于在JAR文件中运行的Spring Boot应用程序的配置文件类型。
特点:这些配置文件在JAR包中提供配置信息,通常用于嵌入式部署场景。
配置文件的优先级
YAML > Properties > XML
SpringBoot常用注解
@SpringBootApplication:一个复合注解,由以下三个注解组成 用于标识 Spring Boot 应用的主类。
@Configuration:表明该类是一个 Java 配置类,用于定义 Spring Bean 的配置信息。
@EnableAutoConfiguration:自动配置注解,用于开启 Spring Boot 的自动配置功能。
@ComponentScan:用于自动扫描和注册 Spring Bean。
@RestController:用于定义 RESTful 接口,相当于 @Controller 和 @ResponseBody 的组合。
@RequestMapping:用于定义 HTTP 请求的映射,用于处理 HTTP 请求。
@Autowired:自动注入注解,用于自动装配 Spring Bean。
@Value:属性注入注解,用于注入配置文件中的属性值。
SpringBoot热部署
什么是热部署?
Spring Boot 热部署是指在开发过程中,当对代码进行修改后,无需手动重新启动应用程序,就能使修改立即生效并反映在正在运行的应用中的一种技术特性。它大大提高了开发效率,减少了开发者在反复启动服务所消耗的时间.
热部署实践
我们这里采用最简单的方式实现(DevTools),热部署只是为了方便开发,在正式环境,打包时记得忽略
在pom.xml中的dependencies标签中引入以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<!--将optional设置为true是保证该依赖是可选的,避免依赖的传递性-->
</dependency>
添加好依赖后,刷新pom.xml并编辑配置文件,添加如下配置
#热部署
devtools:
restart:
enable: true #设置开启热部署,false即不开启热部署
additional-paths: src/main/java #指定热部署的目录
exclude: test/** #指定目录不更新
#解决静态资源不更新
thymeleaf:
cache: false #使用Thymeleaf模板引擎,关闭缓存#热部署
当然还需要修改设置
(旧版本idea)按住快捷键:Shift+Ctrl+Alt+/ (idea旧版本,新版本该配置项换了位置,下面会讲)
(新版本idea)
然后重新启动IDE测试一下效果
SpringBoot自定义Starter
可以说,SpringBoot配置简单是跟Starter分不开的,它将相关技术或功能所需的一组依赖打包在一起。开发者无需手动查找和添加每个单独的依赖,只需要引入对应的 Starter 依赖,就能方便地获得一组经过测试和兼容的依赖项,大大减少了依赖配置的复杂性和出错的可能性。
如果你的项目有一些自定义的依赖或者固定的工具依赖,非常适合使用自定义Starter解决你的需求。如果你觉得自定义Starter难以理解,可以先看下面的自动配置原理。
命名规范
官方的 starter
的命名格式为 spring-boot-starter-{xxxx}
比如spring-boot-starter-activemq;
第三方我们自己的命名格式为 {xxxx}-spring-boot-starter
。比如mybatis-spring-boot-starter
。
规范还是建议大家遵守,也有助于养成一个良好的代码设计风格
自定义starter
的步骤特别简单,需要创建两个模块,其中一个名字为{xxxx}-spring-boot-starter用于管理依赖,并一个模块则用于实现自动配置,名称为{xxxx}-spring-boot-autoconfi
首先创建两个模块(模块名的自定义部分可以根据自己的功能决定,我这里是时间格式转换)
为什么要创建两个模块?
因为一个用于实现自动配置,另一个用于依赖管理,官方的Starter就是这么做的,所以我们照着做.
引入依赖(这里看自己情况,需要什么依赖,就引入什么,下面的必须引入)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
然后来制作我们的自动配置starter
在自动配置模块中编写自动配置文件和自定义的功能,可以加上条件注解(@Conditional)增强代码的健壮性,我这里就不加了,不了解的朋友可以看一下这个博客)
我的自定义功能很简单
编写需要自动配置的类的配置文件
这里我的springboot的版本很高,如果你这个报错了,可以将文件名变成sprfactories文件,然后在文件里加上自动配置类的全类名
然后在starter这个模块的依赖管理文件中 引入自己的自动配置依赖
然后再起一个模块,测试一下自己定义的starter
文件名:org.springframework.boot.autoconfigure.AutoConfiguration.imports
原理篇
自动配置原理
当然SpringBoot的自动配置原理是个很大的问题,这篇文章的深度很有限
第一步,当点击SpringBoot工程的启动按钮,SpringBoot会注册源配置类(@SpringBootApplication)并递归加载所有配置类。
第二步,根据ComponentScan和Import注解扫描包及加载配置类,使用Import注解导入ImportSelector选择器。
第三步,调用selectImports()使用SpringFactories机制实现AutoConfigurationImportSelector达到开箱即用的效果。
具体的实现步骤如下:
通过SpringFactories机制加载配置文件:通过ClassLoader获取classpath中的配置文件META-INF/spring.factories
找出所有的自动配置类:在所有的配置文件的META-INF/spring.factories中,筛选出以EnableAutoConfiguration.class为key的,符合条件的配置类(注意这个地方不同的版本配置文件名字不一样)
根据条件注解过滤掉不必要的自动配置类:通过@Conditional
@Conditional是一个来自Spring的注解
——作用:只有当特定条件满足时,才会向IOC容器中注册指定的组件