一、Spring Boot概要
1.Spring Boot简介
Spring Boot它使用 “习惯 优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配 置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运行jar,内嵌 Servlet 容器)、准生产强力的基于 Spring 框架的项目,使用 Spring Boot你可以不用或者只需要很少的 Spring 配置。
2.Spring Boot优点
创建独立Spring应用
内嵌web服务器
自动strater依赖,简化构建配置
起步以来,起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM), 定义了对其他库的传递依赖 ,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是 将具备某种功能的坐标打包到一起,并提供一些默认的功能
自动配置Spring以及第三方功能
提供生产级别的监控,健康检查及外部化配置
无代码生成,无需编写XML
注意:
SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架
Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式
3.SpringBoot缺点
迭代快,需要时刻关注变化
封装太深,内部原理复杂,不容易精通
二、SpringBoot入门
1.搭建SpringBoot项目
1. 创建一个新项目
2. 选择spring initalizr , 可以看到默认就是去官网的快速构建工具那里实现
3. 填写项目信息
4. 选择初始化的组件(初学勾选 Web 即可)
5. 填写项目路径
6. 等待项目构建成功
2.运行原理初步探究
1. spring-boot-starter-parent
springBoot项目都要继承spring-boot-starter-parent
spring-boot-starter-parent中定义了若干个依赖管理
继承parent模块可以避免多个依赖使用相同技术时出现依赖冲突
继承parent的形式也可以采用引入依赖的形式实现效果例如alibaba
2. start
导入套餐形式的坐标从而简化配置,坐标实现依赖传递
3. 引导类
程序主入口,初始化spring容器,扫描所有类
可以通过run方法返回值获取bean检验
4. 内嵌tomcat
三、SpringBoot核心配置
1.配置文件分类
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就 可以使用 application.properties或者application.yml(application.yaml)进行配置
application.properties
语法结构: key=value
server.port=8081
application.yml
语法结构: key:空格value(冒号后面必须要有空格)
server:
port: 8081
小结:
SpringBoot提供了2种配置文件类型:properteis和yml/yaml
默认配置文件名称:application
在同一级目录入如果三类文件共存,优先级为:properties > yml > yaml
2.YAML概述
YAML全称是 YAML Ain't Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序
列化格式, 并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语
言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心
的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml。
properties:
server.port=8080
server.address=127.0.0.1
yml:
server:
port: 8080
address: 127.0.0.1
3.YAML基础语法
1. 大小写敏感
2. 数据值前边必须有空格,作为分隔符
3. 使用缩进表示层级关系
4. 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混 乱)。
5. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
6. "#"表示注释,从这个字符一直到行尾,都会被解析器忽略。
YAML:数据格式
字面量:普通的值【数字,布尔值,字符串】
boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
string: HelloWorld #字符串可以直接书写
数组:一组按次序排列的值(List,set)
address:
- beijing
- shanghai
#行内写法
company:[阿里巴巴,华为,腾讯]
对象,Map(键值对)
person:
name: liming
#行内写法
person:{name: liming}
#对象数组格式一
users:
- name: Tom
age: 4
- name: Jerry
age: 5
#对象数组格式二
users:
-
name: Tom
age: 4
-
name: Jerry
age: 5
对象数组缩略格式
users2: [ { name:Tom,age:4 },{ name:Jerry,age:5 } ]
YAML:参数引用
name: wangzhuo
person: name: xuelaoshi
pet: ${name} # 引用上边定义的name值
name: xuls${random.uuid} # 配置文件占位符,随机uuid
name: ${person.name}_真帅
YAML:小结
1) 配置文件类型
properties:和以前一样 (设置文件的语言编码UTF-8)
yml/yaml:注意空格
2) yaml:简洁,以数据为核心
基本语法
大小写敏感
数据值前边必须有空格,作为分隔符
使用空格缩进表示层级关系,相同缩进表示同一级
数据格式
对象
数组: 使用 " - "表示数组每个元素
纯量
参数引用 ${key}
4.读取配置内容
yaml文件更强大的地方在于,他可以给实体类直接注入匹配值!
支持方式: 逐个注入:@Value
批量注入: 1.@ConfigurationProperties
2.Environment类
逐个注入
加载指定的配置文件@PropertySource :加载指定的配置文件;
@Component //注册bean
public class Dog {
@Value("阿黄")
private String name;
@Value("18")
private Integer age;
}
在resources目录下新建一个dog.yml文件
name: 阿黄
age: 18
@PropertySource(value = "classpath:dog.yml")
@Component //注册bean
public class Dog{
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
}
批量注入方式1
@Component //注册bean到容器中
public class Person {
private String name;
private integer age;
private boolean marry;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//有参无参构造、get、set方法、toString()方法
}
编写yaml文件内容
person1:
name: wangls
age: 18
marry: true
birth: 1990/10/19
maps: {k1: v1,k2: v2}
lists:
- code
- bodybuilding
- music
dog:
name: summer
age: 1
将数据注入到我们的类中
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
@Component //注册bean
@ConfigurationProperties(prefix = "person1")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
如果编写完配置文件有红色提示,则可以添加坐标隐藏
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
批量注入方式2
直接在测试类中装配开发模式类辅助获取key对应value数据
@Autowired
private Environment env;
@Test
public void test(){
System.out.println(env.getProperty("person1.name"));
System.out.println(env.getProperty("person1.age"));
System.out.println(env.getProperty("person1.dog.name"));
System.out.println(env.getProperty("person1.lists[0]"));
}
5.JSR303数据校验
对于 web 服务来说,为防止非法参数对业务造成影响,在 Controller 层一定要做参数校验的!
大部分情况下,请求参数分为如下两种形式:
1. POST 、 PUT 请求,使用 requestBody 传递参数;
2. GET 请求,使用 requestParam/PathVariable 传递参数。
JSR303标准
JSR的全称是Java Specification Requests(Java 规范提案),是指向JCP ( Java Community
Process )提出新增一个标准化技术规范的正式请求。
Java API 规范( JSR303 )定义了 Bean 校验的标准 validation-api ,但没有提供实现。
hibernate validation 是对这个规范的实现,并增加了校验注解如 @Email 、 @Length 等。
Spring Validation 是对 hibernate validation 的二次封装,用于支持 spring mvc 参数自动校验。
JSR303校验注解的使用步骤
1.添加依赖,导入spring-boot-starter-validation启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.在实体类需要校验的成员字段(Field)上,添加校验注解。
@Component //注册bean到容器中
//@ConfigurationProperties(prefix = "dog")
//@Validated
public class Dog {
@NotNull(message = "不能为空")
private String name;
@NotNull(message = "不能为空")
@Max(value = 15,message = "最大值")
private Integer age;
@Min(value = -1,message = "最小值")
private Integer length;
@Email(message = "邮箱必须合法")
private String email;
}
6.Controller统一异常处理
@ControllerAdvice:统一为Controller进行"增强"
@ExceptionHandler : 异常处理
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.*;
@ControllerAdvice
public class BindExceptionUtilAdvice {
// 验证参数未使用@RequestBody注解
@ExceptionHandler(BindException.class)
@ResponseBody//选择添加
public String handlerBindException(BindException ex, HttpServletRequest
request){
return "全局异常处理器成功"; // 跳转至统一提示错误信息的视图
}
}
7.多环境切换
我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。
命名语法:
例如:application-环境简称.properties/yml
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
profile激活方式
spring:
profiles:
active: 环境简称