SpringBoot介绍
约定大于配置!!!
优点
- 节省了调度资源
- 每个各功能元素都是一个可替换的、可独立升级的软件代码
微服务
概念
微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
特点
-
- 一个微服务可独立运行在自己的进程里;
-
- 一系列独立运行的微服务共同构建起了整个系统;
-
- 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理,用户管理等;
-
- 微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用。
单体框架与微服务区别
- 单体架构所有的模块全都耦合在一块,代码量大,维护困难,微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。
- 单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(redis/mysql),数据库也是单个模块对应自己的数据库。
- 单体架构所有的模块开发所使用的技术一样,微服务每个模块都可以使用不同的开发技术,开发模式更灵活。
第一个SpringBoot
方法一
- 官网下载 导入
方法二
步骤:
- IDEA创建,删除无关信息
若创建时没有选择添加web支持 在Pom.xml中添加支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
————问题:连接失败
- 显示:Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port.
————解决:端口被占用 -
- cmd中输入netstat 8080 检查是否被占用
-
- 若被占用 输入netstat -ano | findstr 8080 查看占用端口的进程号
-
- 输入taskkill /F /PID 8724 将此进程终止
-
- 重启SpringBoot
- 在SpringbootApplication目录下创建Controller包,pojo包等
- 编写helloController,启动项目
@RestController
public class helloController {
// 编写接口
@GetMapping("/h1")
public String demo01(){
return "helloWorld";
}
}
可在application.properties中改端口号
# 更改端口号
server.port=8081
可自己设计banner.txt,在application.properties目录下创建banner.txt 赋值图片,重启SpringBoot
SpringBoot原理
Pom.xml中
- parent中spring-boot-starter-parent的父工程:spring-boot-dependencies————用于管理核心依赖(引入SpringBoot依赖时,不需要指定版本,由父工程管理版本仓库)
启动器
<!--启动场景-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
-
- spring-boot-starter-web—————导入web相关jar包
-
- spring-boot-starter-test—————导入测试相关jar包
主程序
@SpringBootApplication // 表示这个类是一个SpringBoot应用
public class SpringbootApplication {
public static void main(String[] args) {
// 启动应用
SpringApplication.run(SpringbootApplication.class, args);
}
}
@SpringBootApplication:说明这该类是SpringBoot的主配置类
- 运行该类启动SpringBoot应用程序
该注解下有:
@ComponentScan——自动扫描并加载符合条件的组件或者bean,将这个bean注入到IOC容器中
@SpringBootConfiguration——表示这是一个SpringBoot的配置类
@EnableAutoConfiguration——开启自动配置功能
结论:SpringBoot所有的配置都是启动的时候扫描并加载
- spring-boot-test-autoconfigure的jar包中的spring.factories中有所有的自动装配类,只要导入对应的start,拥有对应的启动器,自动装配才会生效。
自动装配生效步骤:
-
- SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
-
- 将这些值作为自动配置类导入容器,自动配置类就生效,进行自动装配工作
SpringApplication.run(该类.class,args)
开启一个应用程序,而不是运行一个main方法
1.实例化 SpringApplication,使用构造方式时调用initialize()初始化
-
- 执行initialize()方法时:
-
-
- (1) 判断式普通项目或Web项目:若是普通项目,则执行完就结束
-
-
-
- (2) 查找加载所有可用的初始化器
-
-
-
- (3) 获取并保存监听器
-
-
-
- (4) 推断并设置main方法的定义类,找到运行的主类
-
- 执行run()方法
总结
- 创建SpringApplication对象————在对象初始化时保存事件监听器,容器初始化类以及判断是否为web应用,保存包含main方法的主配置类。
- 调用run方法————准备spring的上下文,完成容器的初始化,创建,加载等。会在不同的时机触发监听器的不同事件。
yaml
- 以数据作为中心
properties格式————键值对
name=root
password=123
yaml格式————数据前记得加空格
# key-value
name: Tom
# 对象
student:
name: JACK
age: 18
# 行内对象
Teacher: {name: Rose,age: 20}
# 数组
pets:
- dog
- cat
# 行内数组
colors: [red,yellow]
注入yaml配置文件
- 创建实体类,添加注解
@ConfigurationProperties:将配置文件中配置的属性的值映射到组件中,绑定属性与配置文件中的值
- 参数 prefix = “person” : 指定yaml中person的值与属性一一对应
@Component // 组件
@ConfigurationProperties(prefix = "person") // 赋值
public class Person {
private String name;
private int age;
private Date birth;
private Map<String,String> maps;
private List<String> hobby;
private Dog dog;
- 编写application.yaml配置文件,进行赋值
也可直接在属性上@Value进行赋值
person:
name: Tom
age: 18
birth: 2021/07/12
maps: {k1: v1,k2: v2}
hobby:
- sing
- dance
- sleep
dog:
name: 小白
age: 3
- 测试类测试
@SpringBootTest
class Springboot02ConfigApplicationTests {
@Autowired // 自动装配
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
若使用xxx.properties,可添加注解@PropertySource——加载指定的配置文件
xx.properties与xx.yaml区别
简便
- @ConfigurationProperties只需要写一次
- properties的@Value则需要每个字段都添加
封装对象
- yaml可以封装对象
- properties不能封装对象
松散绑定:yaml中的last-name与属性中lastName一致
- -后面跟着的字母默认是大写的。
JSR303数据校验:在字段中增加一层过滤器验证,保证数据的合法性