Spring Boot 是 Pivotal 团队在 Spring 的基础上提供的一套全新的开源框架,其目的是为了简化 Spring 应用的搭建和开发过程。Spring Boot 去除了大量的 XML 配置文件,简化了复杂的依赖管理。
Spring Boot 具有 Spring 一切优秀特性,Spring 能做的事,Spring Boot 都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot 也成了时下炙手可热的技术。
Spring Boot 集成了大量常用的第三方库配置,Spring Boot 应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑。
- 一个快速开发的脚手架
- 基于SpringBoot可以快速的开发单个微服务
- 约定大于配置!
微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的
类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。
通过Spring官网初始化springboot项目,获得springboot项目压缩包
直接通过IDEA来创建springboot项目即可
如果要用到
tomcat
,注意在创建项目时一定要加上 spring Web,否则内置tomcat不会运行,网页也不会显示出来
在controller包中创建一个类,并且添加注释
@RestController
public class HelloController {
// -- 接口: http://localhost:8080/hello
@RequestMapping("/hello")
public String hello() {
// -- 调用业务,接收前端的参数!
return "hello,springboot~";
}
}
程序运行结果:
注意:
在主程序的同级目录下,新建一个
controller
包,一定要在同级目录下,否则识别不到一定要在主程序类所在的包下创建其他包才能生效
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.7.3version>
<relativePath/>
parent>
<groupId>com.cczjgroupId>
<artifactId>springboot-helloWorldartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>springboot-helloWorldname>
<description>springboot-helloWorlddescription>
<properties>
<java.version>11java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
推荐网站:Spring Boot banner在线生成工具,制作下载banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.net
将banner
进行下载,然后添加在resource
包下重新启动服务器即可
自动配置:
spring-boot-dependencies
: 核心依赖在父工程中启动器
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
启动器:就是Springboot的启动场景
比如spring-boot-starter-web
,他就会帮我们自动导入web环境所有的依赖~
springboot会将所有功能的场景都变成一个个的启动器
我们要使用什么功能,就只需要找到对应的启动器就可以了
注解:
源码探不动,直接上结论:
springboot所有自动配置都是在启动的时候扫描并加载:spring.factories
所有的自动配置类都在这里面,但是不一定生效。要经过一个注解进行判断条件是否成立才会生效。
只要导入了对应的start,就有对应的条件进行判断,然后就会产生对应的启动器,有了启动器,自动装配就会生效,然后就配置成功~
/META-INF/spring.factories
获取指定的值spring-boot-autoconfigure-2.2.0.RELEASE.jar
这个包下XXXautoConfiguration
的文件,就是这些类给容器中导入了这个场景所需要的所有组件;并自动配置这些组件。关于springboot,谈谈你的理解:
initializers
属性中listeners
属性中因为官方的配置实在是太多了,所以尽量了解原理,然后简单配置
springboot 使用一个全局的配置文件,配置文件名称是固定的
修改springboot自动配置的默认值,因为springboot在底层都给我们自动配置好了。
普通的key-value 注意空格!
name: zhangsan
对象
student:
name: zhangsan
age: 3
行内写法
student: {name: zhangsan,age: 3}
数组
pets:
- cat
- dog
- pig
pets: [cat,dog,pig]
在对应的类上添加注释@Configuration(prefix=“类名”),实现yaml注入。而properties
只能通过value
一个一个单独赋值,非常麻烦
yaml中可以使用EL表达式,如${random.uuid}
松散绑定:如果yaml中按照 last-name
来写名称,那么这个属性就可以在类中写为 lastName
JSR303 数据校验,这个就是我们可以在字段上增加一层过滤器验证,可以保证数据的合法性
private String email
就可以添加 @Email 进行邮箱校验yaml中可以封装对象,使用 @value就不支持
同时配置多个文件时,生效按照优先级高的最先
spring profiles active
选择配置文件版本,提高优先级
配置yaml
和配置properties
都可以获取到值,但非常推荐yaml
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下@value
如果我们专门编写了一个javaBean来和配置文件进行映射,就直接使用@configurationProperties,不要犹豫