Spring Boot

第1章 Spring Boot概要

        1.1 SpringBoot介绍

随着动态语言的流行(Ruby、Scala、Node.js), Java的开发显得格外的笨重;繁多的配置、低下的开 发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下,Spring Boot由此诞生,它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯 优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配 置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运行jar,内嵌 Servlet 容器)、准生产强力的基于 Spring 框架的项目,使用 Spring Boot你可以不用或者只需要很少 的 Spring 配置。提供了 J2EE 开发的一站式解决方案。 2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一(https://spring.io)。

        1.2 SpringBoot优点

Create stand-alone Spring applications

        创建独立Spring应用

Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

        内嵌web服务器

Provide opinionated 'starter' dependencies to simplify your build configuration

        自动starter依赖,简化构建配置

        起步依赖 ,起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),         定义了对其他库的传递依赖 ,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是         将具备某种功能的坐标打包到一起,并提供一些默认的功能

Automatically configure Spring and 3rd party libraries whenever possible

        自动配置Spring以及第三方功能

Provide production-ready features such as metrics, health checks, and externalized configuration         提供生产级别的监控、健康检查及外部化配置

Absolutely no code generation and no requirement for XML configuration

        无代码生成、无需编写XML  

SpringBoot是整合Spring技术栈的一站式框架

SpringBoot是简化Spring技术栈的快速开发脚手架

Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式

        1.3 SpringBoot缺点

人称版本帝,迭代快,需要时刻关注变化

封装太深,内部原理复杂,不容易精通

        1.4 时代背景-微服务

微服务是一种架构风格

一个应用拆分为一组小型服务

每个服务运行在自己的进程内,也就是可独立部署和升级

服务之间使用轻量级HTTP交互

服务围绕业务功能拆分

可以由全自动部署机制独立部署

去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

        1.5 如何学习SpringBoot

查看版本新特性: https://github.com/spring-projects/spring-boot/wiki#release-notes 

第2章Spring Boot入门开发

        2.1 环境要求

环境准备:

java version "1.8.0_181"

Maven-3.6.1

SpringBoot 2.x 最新版

 

        2.2 快速构建SpringBoot项目

项目创建方式一:使用Spring Initializr 的 Web页面创建项目

1. 打开 https://start.spring.io/

2. 填写项目信息

3. 点击”Generate Project“按钮生成项目;下载此项目

4. 解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。

5. 如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。  

项目创建方式二:使用 IDEA 直接创建项目

1. 创建一个新项目

2. 选择spring initalizr , 可以看到默认就是去官网的快速构建工具那里实现

3. 填写项目信息

4. 选择初始化的组件(初学勾选 Web 即可)

5. 填写项目路径

6. 等待项目构建成功  

项目创建方式三:使用 IDEA 直接创建项目

1. 与方式2相同,但是参考路径为:https://start.aliyun.com  

项目创建方式四:使用 IDEA 创建Maven项目并改造为springBoot 项目结构分析:

1. 程序的主启动类

2. 一个 application.properties 配置文件

3. 一个 测试类

4. 一个 pom.xml

                2.2.1 实现处理请求案例

1、在主程序的同级目录下,新建一个controller包,一定要在同级目录下,否则识别不到

2、在包中新建一个HelloController类

3、编写完毕后,从主程序启动项目,浏览器发起请求,看页面返回;控制台输出了 Tomcat 访问的端 口号!

                2.2.2 项目打jar包

使用指令 java -jar 项目名  

               2.2.3 banner修改

1. 项目下的 resources 目录下新建一个banner.txt 即可。

2. 图案可以到:https://www.bootschool.net/ascii 这个网站生成,然后拷贝到文件中即可!

3. 设置图片作为banner

                2.2.4 项目列表显示优化

        2.3 运行原理初步探究

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

第3章 Spring Boot 核心配置

        3.1 Spring Boot配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用

application.properties或者application.yml(application.yaml)进行配置

        application.properties

                语法结构 :key=value

         application.yml

                语法结构 :key:空格 value (冒号后面必须要有空格)

 小结

SpringBoot提供了2种配置文件类型:properteis和yml/yaml

默认配置文件名称:application

在同一级目录入如果三类文件共存,优先级为:properties > yml > yaml

        3.2 YAML概述

YAML全称是 YAML Ain't Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化 格式,

并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比 如:

        C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简 洁。

YAML文件的扩展名可以使用.yml或者.yaml。

properties:

 xml:

 yml:

简洁,以数据为核心  

        3.3 YAML基础语法

1. 大小写敏感

2. 数据值前边必须有空格,作为分隔符

3. 使用缩进表示层级关系

4. 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混 乱)。

5. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

6. "#"表示注释,从这个字符一直到行尾,都会被解析器忽略。

YAML:数据格式

        字面量:普通的值 [ 数字,布尔值,字符串 ]  

         数组:一组按次序排列的值( List、set )

         对象、Map(键值对)

YAML:参数引用

YAML:小结

1) 配置文件类型

        properties:和以前一样 (设置文件的语言编码UTF-8)

        yml/yaml:注意空格

2) yaml:简洁,以数据为核心

        基本语法

                大小写敏感

                数据值前边必须有空格,作为分隔符

                使用空格缩进表示层级关系,相同缩进表示同一级

        数据格式

                对象

                数组: 使用 " - "表示数组每个元素

                 纯量

        参数引用

                 ${key}

        3.4 读取配置内容

 yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!

        支持方式:

        逐个注入:@Value

        批量注入:1.@ConfigurationProperties

                          2.Environment类

逐个注入演示

加载指定的配置文件@PropertySource :加载指定的配置文件; 

在resources目录下新建一个yml文件

批量注入方式1

编写一个复杂一点的实体类:Person 类  

@Component
@ConfigurationProperties(prefix = "persons")
//@Validated
public class Person {
    private String lastName;
    @Email(message = "邮箱格式不正确")
    private String email;
    @NotNull(message = "用户名称不能为空")
    private String name;
    @NotNull(message = "用户年龄不能为空")
    @Max(value = 150,message = "给年轻人留点机会吧")
    private Integer age;
    private boolean marry;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

 //有参无参构造、get、set方法、toString()方法  
    
}

编写yml文件内容 

##########################批量注入###################################
persons:
  last-name: 许
  name: 许娜
  email: 3058389349@qq.com
  age: 21
  marry: false
  birth: 1990/10/19
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - bodybuilding
    - music
  dog:
    name: summer
    age: 1

将数据注入到我们的类中

 @ConfigurationProperties作用:

将配置文件中配置的每一个属性的值,映射到这个组件中;

告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定

参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应

如果编写完配置文件有红色提示,则可以添加坐标隐藏  

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

测试类中测试一下

@SpringBootTest
class SpringbootInit01ApplicationTests {

    @Autowired
    Person persons; //将person自动注入进来

    @Test
    void contextLoads() {
        System.out.println(persons); //打印person信息
    }

}

 批量注入方式2

直接在测试类中装配开发模式类辅助获取key对应value数据

 

对比小结

@Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;

1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟 着的字母默认是大写的。这就是松散绑定。可以测试一下

3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论:

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接 @configurationProperties,不要犹豫!  

        3.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 参数自动校验。接下 来,我们以 spring-boot 项目为例,介绍 Spring Validation 的使用

                JSR303校验注解的使用步骤

1.添加依赖,导入spring-boot-starter-validation启动器

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

 2.在实体类需要校验的成员字段(Field)上,添加校验注解。

3.在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果

  @RequestMapping(path = "/dosave")
    @ResponseBody
    public String dosave(@Valid Person person, BindingResult result) {
        //得到所有错误信息计数
        int errorCount = result.getErrorCount();
        //错误数大于0
        if (errorCount > 0) {
            //得到所有错误
            List<FieldError> fieldErrors = result.getFieldErrors();
            //迭代错误
            for (FieldError fieldError : fieldErrors) {
                //错误信息
                System.out.println("属性:{}," + fieldError.getField() + "传来的值是: {}" + fieldError.getRejectedValue() + ",出错的提示消息: {}" + fieldError.getDefaultMessage());
            }
            return "数据不合法";
        } else {
            return "数据合法";
        }
    }

 JSR303校验注解的分类

值校验:

 范围校验

 长度校验:

 格式校验:

                Controller统一异常处理

@ControllerAdvice:统一为Controller进行"增强"

@ExceptionHandler : 异常处理

         3.6 多环境切换profile

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。 其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。 profile功能就是来进行动态配置切换的;

命名语法:

例如:application-环境简称.properties/yml

application-dev.properties/yml 开发环境

application-test.properties/yml 测试环境

application-pro.properties/yml 生产环境

1) profile配置方式

        多profile文件方式

2) profile激活方式

        配置文件 :

虚拟机参数 :在VM options 指定:-Dspring.profiles.active=dev

命令行参数:java –jar xxx.jar --spring.profiles.active=dev

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值