目录
4.2 批量注入 @ConfigurationProperties
7. @RequestBody和@RequestMapping
一、Spring Boot概要
1. SpringBoot介绍
它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运行jar,内嵌 Servlet 容器)、准生产强力的基于 Spring 框架的项目,使用 Spring Boot你可以不用或者只需要很少 的 Spring 配置。提供了 J2EE 开发的一站式解决方案。
2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一(https://spring.io)。
2. SpringBoot优点
SpringBoot是整合Spring技术栈的一站式框架。
SpringBoot是简化Spring技术栈的快速开发脚手架。
Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。
(1)创建独立Spring应用
(2)内嵌web服务器
(3)自动starter依赖,简化构建配置
(4)起步依赖 ,起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM), 定义了对其他库的传递依赖 ,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能
(5)自动配置Spring以及第三方功能
(6)提供生产级别的监控、健康检查及外部化配置
(7)无代码生成、无需编写XML
3. SpringBoot缺点
(1)人称版本帝,迭代快,需要时刻关注变化
(2)封装太深,内部原理复杂,不容易精通
4. 时代背景-微服务
(1)微服务是一种架构风格
(2)一个应用拆分为一组小型服务
(3)每个服务运行在自己的进程内,也就是可独立部署和升级
(4)服务之间使用轻量级HTTP交互
(5)服务围绕业务功能拆分
(6)可以由全自动部署机制独立部署
(7)去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
二、Spring Boot 核心配置
springboot_init_01项目
1. Spring Boot配置文件分类
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置。
1.1 application.properties
语法结构 :key=value
1.2 application.yml
语法结构 :key:空格 value (冒号后面必须要有空格)
1.3 小结
SpringBoot提供了2种配置文件类型:properteis和yml/yaml
默认配置文件名称:application
在同一级目录入如果三类文件共存,优先级为:properties > yml > yaml
2. YAML概述
YAML全称是 YAML Ain't Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式。
简洁,以数据为核心。
3. YAML基础语法
3.1 注意事项
(1)大小写敏感
(2)数据值前边必须有空格,作为分隔符
(3)使用缩进表示层级关系
(4)缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的空格数目可能不同,导致层次混乱)。
(5)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
(6)"#"表示注释,从这个字符一直到行尾,都会被解析器忽略
3.2 数据格式
(1)字面量:普通的值 [ 数字,布尔值,字符串 ]
(2)数组:一组按次序排列的值( List、set )
使用 " - "表示数组每个元素。
(3)对象、Map(键值对)
(4)yaml引用(${key})
4. 读取配置内容
yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!
支持方式:
逐个注入:@Value
批量注入:(1)@ConfigurationProperties
(2)Environment类
4.1 逐个注入 @Vule(基本数据类型)
application.yml
4.2 批量注入 @ConfigurationProperties
@ConfigurationProperties作用:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应。
4.3 对比小结
(1)@ConfigurationProperties只需要写一次即可,@Value则需要每个字段都添加
(2)松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的,- 后面跟着的字母默认是大写的。这就是松散绑定。
(3)JSR303数据校验,这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性。
(4)复杂类型封装,yml中可以封装对象,使用value就不支持
结论:
(1)配置yml和配置properties都可以获取到值,强烈推荐 yml;
(2)如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
(3)如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
5. JSR303数据校验
对于 web 服务来说,为防止非法参数对业务造成影响,在 Controller 层一定要做参数校验的!大部分情况下,请求参数分为如下两种形式:
(1) POST 、PUT 请求,使用 requestBody 传递参数;
(2) GET 请求,使用 requestParam/PathVariable 传递参数。
5.1 什么是 JSR303 标准
JSR的全称是Java Specification Requests(Java 规范提案),是指向JCP ( Java Community Process )提出新增一个标准化技术规范的正式请求。
5.2 JSR303校验注解的使用步骤
(1)添加依赖,导入spring-boot-starter-validation启动器
(2)在实体类需要校验的成员字段(Field)上,添加校验注解。
(3)方式一(在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果。)
(4)方式二(Controller统一异常处理)
@ControllerAdvice:统一为Controller进行"增强"
@ExceptionHandler : 异常处理
6. 多环境切换profile
通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。
profile功能就是来进行动态配置切换的;
(1)命名语法:
例如:
application-环境简称.properties/yml
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
(2)profile激活方式
配置文件(application.yml):
7. @RequestBody和@RequestMapping
@ResponseBody: 将方法返回值转换为json并响应给方法的请求者
@RequestMapping: 处理用户请求