文档下载地址: docs.spring.io/spring-boot…
Spring boot是目前java微服务广泛使用的Web框架,本身内部的核心模块是嵌入的tomcat和spring mvc。而SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Pivotal 公司:致力于“改变世界构造软件的方式(We are transforming how the world builds software)”,提供云原生应用开发 PaaS 平台及服务,帮助企业客户采用敏捷软件开发方法论,从而提高软件开发人员工作效率、减少运维成本,实现数字化转型、IT 创新,并最终实现业务创新。
1、SpringBoot解决了什么问题
1.1 Spring存在的问题
多年以来,Spring 平台饱受非议的一点就是大量的 XML 配置以及复杂的依赖管理。
随着使用 Spring 进行开发的个人和企业越来越多,Spring 也慢慢从一个单一简洁的小框架变成一个大而全的开源软件,Spring 的边界不断进行扩充,到了后来 Spring 几乎可以做任何事情,市面上主流的开源软件、中间件都有 Spring 对应组件支持,人们在享用 Spring 的便利之后,也遇到了一些问题。
Spring 每集成一个开源软件,就需要增加一些基础配置,随着开发项目的逐渐庞大,往往需要集成很多开源软件。后期使用 Spring 开发大型项目需要引入很多配置文件,导致配置工作难以理解且出错率高,到了后来人们甚至称 Spring 为配置地狱。
在以往我们采用SpringMVC + Spring + MyBatis框架进行开发的时候,搭建和整合三大框架,我们需要做很多工作,比如配置web.xml,配置Spring,配置MyBatis,并将它们整合在一起等。
1.2 SpringBoot出现
为了解决tomcat和spring mvc中非常繁琐的各种配置问题。基于这样一个历史背景,Spring Boot提供了一整套解决方案,对此开发过程进行了革命性的颠覆,完全抛弃了繁琐的xml配置过程,采用大量的默认配置简化我们的开发过程。
Spring Boot利用spring 4对条件化配置的支持,spring boot实现了合理推测应用所需的bean并自动化配置的机制。SpringBoot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可以说SpringBoot能简化我们之前采用SpringMVC + Spring + MyBatis框架进行开发的过程。
所以采用SpringBoot可以非常容易和快速地创建基于Spring框架的应用程序,它让编码变简单了,配置变简单了,部署变简单了,监控变简单了。正因为 SpringBoot 它化繁为简,让开发变得极其简单和快速,所以在业界备受关注。
2、SpringBoot的特点
1) 能够快速创建基于Spring的应用程序。
使用嵌入式的Servlet容器(例Tomcat、Jetty等),应用无需打成WAR包.
提供约定的starter POM来简化Maven配置,让Maven的配置变得简单。
自动化配置,根据项目的Maven依赖配置,Springboot自动配置Spring、Spring mvc等。
提供了程序的健康检查等功能。
无代码生成和xml配置,采用注解配置。
3、SpringBoot四大核心
3.1 自动配置(零配置运行)
针对很多Spring应用程序和常见的应用功能,SpringBoot能自动提供相关配置。
SpringBoot启动的时候加载主配置类,需要开启自动配置功能 @EnableAutoConfiguration
3.2 起步依赖(场景启动器)
告诉SpringBoot需要什么功能,它就能引入需要的依赖库。
org.springframework.boot spring-boot-starter-web这个依赖就是起步依赖,其管理着其他依赖,如 : tomcat、spring-webmvc等。
3.3 Actuator(指标监控)
让你能够深入运行中的SpringBoot应用程序,一探SpringBoot程序的内部信息。使用Actuator可以在SpringBoot程序运行时通过http请求的方式动态的监控和管理程序。
依赖如下:
org.springframework.boot spring-boot-starter-actuator
3.4 命令行界面(命令行)
这是SpringBoot的可选特性,主要针对Groovy语言使用。
@Component
public class XInTuCommand implements CommandLineRunner {
// 获取到注入的 XinTu 对象
@Resource
private XinTu xintu;
// 重写CommandLineRunner类的run方法
@Override
public void run(String... args) throws Exception {
// 将XinTu对象打印
System.out.println(xintu.toString());
}
}
Groovy是一种基于JVM(Java虚拟机) 的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与Java代码很好地结合,也能用于扩展现有代码,由于其运行在JVM上的特性,Groovy可以使用其他Java语言编写的库。
4、SpringBoot版本
Springboot目前分为两大版本系列,2.x系列和3.系列
开发工具推荐Eclipse 或 IDEA。 但是目前社区版本由于权限问题,不自带SpringBoot插件,需要自行安装。
构建工具推荐使用Maven 3.0+,Maven目前最新版本为3.9.1(2023.4)
推荐使用Java 8,SpringBoot 2.x系或3.x 均可。
5、SpringBoot重要策略
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。
5.1 开箱即用
Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。
我们在maven里经常会写诸如 spring-boot-starter-xxx 的依赖,由于只要引入了这样的依赖,其相应的版本无需多余指定,也无需写多余的扫描和加载注解,即可立即使用,称为开箱即用。
5.2 约定优于配置
Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。
约定优于配置:
1)约定编程是一种软件设计规范,本质上是对系统、类库或框架中一些东西假定一个大众化合理的默认值(缺省值)。
2) 在模型中存在一个名为User的类,那么对应到数据库会存在一个名为user的表,只有在偏离这个约定时才需要做相关的配置(例如你想将表名命名为t_user等 非user时才需要写关于这个名字的配置)
3)简单来说就是假如你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时,才需要对约定进行替换配置
4)约定优于配置理念
约定其实就是一种规范,遵循了规范,那么就存在通用性,那么事情就会变得相对简单,程序员之间的通成本会降低,工作效率会提升,合作也会变得更加简单
5)避免理解成约定的优先级高于配置,其实配置的优先级是高于约定的,只是缺省时按照约定配置。
那么默认就是扫描当前启动类所在的包以及启动类的子包。
多个 application 配置文件加载顺序,yml > yaml > properties
读取配置方式方式:
方式一: 使用@value注解读取, 这种方式弊端:只能读取简单类型的数据,没法读取自定义类型数据
方式二: 可以使用@ConfigurationProperties注解去读取,使用这种方式前提:
以上!