springboot

## 第一章 Spring Boot框架

### 1.Spring 缺点

Spring是一个2003年兴起的轻量级的Java开发框架,是为了解决企业级应用开发的复杂性而创建的,被称为JavaEE的春天。

#### 1.1 项目配置繁琐

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring采用XML配置,到Spring2.5以后引入了基于注解的组件扫描,Spring3.0引入了基于Java的配置,但这些所有的配置都代表了开发的耗时。

#### 1.2 导入依赖繁琐

项目的依赖管理也是一件耗时耗力的事情,在环境的搭建时,需要分析导入哪些依赖,哪些库的坐标,而且有时候还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了版本,随之而来的不兼容问题就会严重阻碍项目的开发。



### 2.Spring Boot概述

Spring Boot是Spring提供的一个子项目,它用来简化Spring应用程序的创建和开发过程,也可以说Spring Boot能简化我们之前采用SpringMVC+Spring框架进行开发的过程。用于快速构建Spring应用程序。

在以往我们搭建和整合三大框架,我们需要做很多工作,比如配置web.xml,配置Spring,配置Mybatis,并将它们整合在一起等,而Spring Boot框架对此开发过程进行了革命性的颠覆,完全抛弃了繁琐的xml配置过程,采用大量的默认配置设置简化我们的开发过程。采用Spring Boot可以非常容易和快速地创建基于Spring框架的应用程序,它让编码变的简单了,配置变简单了,部署变简单了,监控变简单了,为了简化而生。

Spring Boot 提供了一种快速使用Spring的方式,基于 “约定优于配置” 的思想,可以让开发人员不必在配置和逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目的开发周期。

Spring Boot也是Spring的一套快速开发整合包, 为Spring平台及第三方库提供开箱即用的设置(提供默认设置)正因为Spring Boot化繁为简,让开发变的及其简单和快速,2014年4月,Spring Boot1.0.0发布以后深受广大企业与开发者所青睐,在业界倍受推崇。

官网:https://spring.io/projects/spring-boot



### 3.Spring Boot的功能特性

web开发中,要引入一系列的依赖

#### 3.1 起步依赖

起步依赖本质上是一个本质上就是一个Maven坐标,整合了完成一个功能需要的所有坐标,定义了对其他库的依赖传递,这些东西加在一起即可支持某项功能,简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

#### 3.2 自动配置

遵循约定大约配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发。比如Spring整合Mybatis时候需要定义的bean实列:SqlSessionFactoryBean、MapperScannerConfigurer等都不需要配置了

#### 3.3 其他特性

内嵌的Tomcat、Jetty(无需部署WAR文件)

外部化配置

不需要XML配置(properties/yml)

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



### 4.快速创建Spring Boot项目

   新建Spring Initializr项目:

- Spring Boot在创建项目的时候,使用jar的打包方式
- Spring Boot的引导类是项目入口,运行main方法就可以启动项目
- Spring Boot和Spring构建的项目,业务代码编写方式完全一样

也可以使用https://start.spring.io/来构建

如果部分同学出现以下异常,可以用如下办法来解决:

~~~properties
出现无效的发行源:11
1、把11改为1.8
<properties>
    <java.version>1.8</java.version>
</properties>
2、file  -  project structure - Modules -全部改为8
3、file - settings - build -complier - java complier  -右侧改为8
~~~



### 5.起步依赖原理分析

#### 5.1 spring-boot-starter-parent

~~~xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.2</version>
    <relativePath/>
</parent>
~~~

spring-boot-starter-parent依赖于

~~~xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.5.2</version>
</parent>
~~~

有效的解决了寻找依赖的麻烦,同时也彻底解决了版本冲突的问题

#### 5.2 spring-boot-starter-web

程序引入spring-boot-starter-web 起步依赖,启动后,会自动往ioc容器中注入DispatcherServlet

 ~~~xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 ~~~

小结:

1.在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。

2.在各种starter中,定义了完成该功能需要的坐标集合,其中大部分版本信息来源于父工程。

3.我们的工程继承parent,引入了starter后,通过依赖传递,就可以获得所需要的jar包,并且不会存在版本冲突。



### 6.Spring-Boot配置文件

#### 6.1 Spring-Boot配置文件分类

Spring-Boot是基于分类的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(yaml)进行配置,默认配置文件名称application

- prpperties 键值对

~~~properties
server.port=8080
~~~

- yml  (yaml) 

~~~yaml
server
  port: 8080
~~~



**在高级版本中,yml与yaml不能同时存在**

如果在一个项目中,同时定义了这三种配置,则prpperties 会生效。

prpperties的优先级最高,其次yml,最后yaml。

默认的配置文件名称叫做:application。	



#### 6.2 YAML基本语法规则

YAML是一种直观的能够被计算机识别的数据序列化格式,YAML是以数据为核心的,比传统的xml更加简洁。

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

- 大小写敏感
- 数据值前面必要要有空格,作为分隔符
- 使用缩进表示层级关系
- 相同层级的的元素左侧对齐
- #表示注释

特点:简洁,以数据为核心

#### 6.3 YAML数据格式

有三种数据格式:

- 1、对象(map): 键值对的集合

~~~yaml
person:
  name: jiaxioaliang
~~~

- 2、数组 : 一组按次序排列的值

~~~yml
address:
  - shanghai
  - hangzhou
~~~

- 3、纯量

~~~yaml
msg1: 'hello \n springboot' #单引忽略转义字符
msg2: "hello \n springboot" #双引识别转义字符
~~~

注意:参数引用加${key}



#### 6.4 读取配置文件内容

##### 6.4.1 @Value

~~~java
@Value("${name}")
private String name;
~~~

@Value实现配置文件的数据读取,一般适用与少量的数据



##### 6.4.2 Environment

~~~java
 @Autowired
 private Environment env;
 //输出
 System.out.println(env.getProperty("person.age"));
~~~



##### 6.4.3 @ConfigurationProperties  

属性的配置项

是将配置内容与对象进行绑定的一种方式,编写实体类,加注解

~~~java
package cn.hxzy.erp.domain;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component //注册成为一个bean实例对象
@ConfigurationProperties(prefix = "person") //我自定义了一个对象,配置文件可以按照自定义的属性去设置。
public class Person {
    private String name;
    private int age;
    private String [] address;
    private String msg1;
    private String msg2;
}

~~~

Controller中自动装配

~~~java
package cn.hxzy.erp.controller;


import cn.hxzy.erp.domain.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private Person person;

    @GetMapping("/getPerson")
    public Person getPerson(){
        return person;
    }
}

~~~

引用完后,发现提示条,问题是在classpath路径下,没有发现注解的处理器

解决办法:

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

安装组件:

setting-plugin-search: YAML/Ansible support



### 7.Spring Boot配置profile

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同的环境,比如:开发,测试,生产等。集中数据库地址,服务端口等配置都不同,如果每次打包

时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

#### 7.1 properties配置方式

- 多properties文件方式:	提供多个配置文件,每个代表一种环境

  application-dev.properties  开发环境

  application-test.properties  测试环境

  application-prod.properties  生产环境

~~~yml
spring.profiles.active=dev  #指定使用哪一套配置
~~~



#### 7.2 yml多文档方式

在yml中使用 --- 分隔不同配置-- 配置代码段

~~~yml
---
server:
  port: 8083
  servlet:
    context-path: /web1
spring:
  config:
    activate:
      on-profile: pro
---
server:
  port: 8082
  servlet:
    context-path: /web2
spring:
  config:
    activate:
      on-profile: test
---
server:
  port: 8081
  servlet:
    context-path: /web3
spring:
  config:
    activate:
      on-profile: dev
---
spring:
  profiles:
    active: prod

~~~



### 8.@SpringBootApplication注解分析

@SpringBootApplication包含的三个注解及其含义

第一个:@SpringBootConfiguration(在这个类的源码中又有一个Configuration的注解)

@Configuration这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,读取其中的配置信息,而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

第二个:@EnableAutoConfiguration

开启自动配置,告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖,此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了。

第三个:@ComponentScan

配置组件扫描的指令

提供了类似与<context:component-scan>标签的作用

通过basePackageClasses或者basePackages属性来指定要扫描的包。

如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包

而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类,

因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。



### 9.其他设置项

#### 9.1.打包项目

cmd 控制,cd到项目的targer目录下,输入如下,启动项目

~~~bash
java -jar xxx.jar
~~~

指定端口:

第一种:控制台命令

~~~shell
java -jar -Dserver.port=9000 springboot-05-1.0.jar #更改启动端口
~~~

第二种:Edit Configurations下

~~~
Environment下的VM options里面输入-Dserver.port=9000
~~~



#### 9.2.修改项目的访问路径

默认值为 

~~~yaml
server:
  servlet:
    context-path: /
~~~

可以不写

设置项:

properties写法:

~~~properties
server.servlet.context-path=/web
~~~

yam写法:

~~~yml
server:
  servlet:
    context-path: /web
~~~



### 10.热部署

#### 10.1 导入依赖

~~~xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>
~~~

#### 10.2设置项

File-settings-Build-compiler

![1](Spring Boot.assets/1.png)

  

按住ctrl+alt+shift+/ 四个键 ,选择Registry,找三个项:

![2](Spring Boot.assets/2.png)





#### 10.3 配置热更新资源

![3](Spring Boot.assets/3.png)



![4](Spring Boot.assets/4.png)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值