前言:以下内容只是本人所学习SpringBoot的冰山一角,如果大家想全面的学习SpringBoot可以到官方网址;
官方网址:https://spring.io/projects/spring-boot
一、什么是SpringBoot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
二、为什么要使用Spring Boot
Spring Boot是为简化Spring项目配置而生,使用它使得jar依赖管理以及应用编译和部署更为简单。Spring Boot提供自动化配置,使用Spring Boot,你只需编写必要的代码和配置必须的属性。
使用Spring Boot,只需20行左右的代码即可生成一个基本的Spring Web应用,并且内置了tomcat,构建的fat Jar包通过Java -jar就可以直接运行。 java -jar crm.jar
如上特性使得Spring Boot非常契合微服务的概念,可以结合Spring Boot与Spring Cloud和Docker技术来构建微服务并部署到云端:
一个可执行jar即为一个独立服务很容易加载到容器,每个服务可以在自己的容器(例如docker)中运行
通过一个脚本就可以实现配置与部署,很适合云端部署,并且自动扩展也更容易
简单而言,即Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单。!
Springboot就是为了简化spring应用搭建,开发,部署,监控的开发工具。
三、Spring Boot的简单概述
-
为简化Spring项目配置而生
-
它使用maven的方式对Spring应用开发进行进一步封装和简化
-
是为了简化spring应用搭建,开发,部署,监控的开发工具
四、SpringBoot-HelloWorld程序
1 开发环境要求:
开发环境JDK 1.8
项目管理工具( Maven )
开发工具(Eclipse/idea)
2 创建Maven项目
①:Maven项目与普通项目之间的区别最主要的就是Maven项目有唯一的标识 pom.xml配置文件
3 导入Spring Boot依赖
<!--
spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<!--添加spring-boot-starter-web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4 编码测试
①:新建一个controller类
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/hello")
public class HellowController {
@RequestMapping("/app")
@ResponseBody
public String hello() {
return "HelloWord.....!!!";
}
}
②:新建一个启动类 App
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
5 SpringBoot-HelloWorld分析
spring-boot-starter-web:web支持,其实就是springmvc简化使用。
Spring-boot-starter-jdbc:springboot对jdbc支持
Spring-boot-starter-data jpa:springboot对data jpa支持
Spring-boot-starter-mybatis:springboot对mybatis支持
Spring-boot-starter-test:springboot对test支持
五、SpringBoot项目结构
application.properties、application.yml
static
templates
六、打包
如果依赖父亲是spring-boot-starter-parent,就不需要添加
1.导入打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>cn.itsource.springboot.HelloApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
或者
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<plugin>
<plugins>
<build>
运行:
java -jar xxx.jar
七、热部署
1 即使修改了输出内容也要重启APP,非常麻烦!可以使用spring-boot-devtools来实现热部署!
2 在pom.xml中导入热部署的依赖包
添加依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
八、Spring boot配置
-
配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties -传统方式,不太优美
•application.yml -推荐使用
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
2 YAML做配置一门语言:
以前的配置文件;大多都使用的是 xxxx.xml文件还有properties;
YAML:以数据为中心,比json、xml等更适合做配置文件;
YAML:配置例子
server:
port: 8081
XML:
<port>8081</port>
properties:
server.port =8081
-
YML语法
3.1. 基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server:
port: 8081
path: /hello
属性和值也是大小写敏感;
3.2. 值的写法
①:字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
②:k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 18}
③:数组(List、Set):
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
4. Profile多环境支持
4.1. *为什么要做多环境配置*
一套代码要在多种环境运行(开发,测试,上线),所以我们的配置文件要支持多种环境
4.2. *多********profile文件*
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
application-dev.yml
application-test.yml
默认使用application.properties的配置;
- Yml支持多文档块模式
server:
port: 8081
spring:
profiles:
active: prod
server:
port: 8083
spring:
profiles: dev
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
九、第一个SpringBoot项目疑问
1 继承parent包有什么作用?
(1) 它管理着项目中很多jar包和插件,jar包只是管理,不引用
(2) 子项目想映入jar包,只需要依赖就可以了(注意:可以不写版本号)
2.在子项目中,我们只依赖了start-web包,但是它给我们导入了很多包,并且我们导包,没有加版本号?
(1) SpringBoot提供的jar包是一个组合包,当你把这个包依赖进来以后,它会把SpringMVC需要的所有依赖包全部给 你导入进来
(2) 注意:SpringBoot提供的jar包格式都是:spring-boot-starter-xxx
(3) SpringBoot提供的jar包的好处,简化了我们的导包过程
3.我们没有配置tomcat,tomcat来自哪里?
当我们导入Web包的时候,它有一个包是内嵌tomcat包,所以当你程序启动的时候,它有服务器
4.我们没有配置各种xml文件,通过main方法,web项目就启动了
(1) 它会加载当前项目运行所需要的相关bean对象
(2) 它会自动装配SpringMVC相关的配置(它有默认配置,我们后面可以改)
(3) 初始话spring容器
(4) 它会把当前项目打成jar包放到内嵌tomcat中,进行运行
SpringBootApplication是个组合注解,它会去自动扫描当前包及其子包下的所有注
十、面试题
1.1. *SpringBoot有哪些优点*
Spring Boot 的优点有:
1、减少开发,测试时间和努力。
2、使用 JavaConfig 有助于避免使用 XML。
3、避免大量的 Maven 导入和各种版本冲突。
4、提供意见发展方法。
5、通过提供默认值快速开始开发。
6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish 或其他任何东西。
7、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释 的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其 进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装 入需要的依赖关系中。
8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序: -Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后, Spring 将在(application{environment} .properties)中加载后续的应用程序属 性文件。
1.2. *什么是JavaConfig?*
Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯 Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:
1、面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分 利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方 法等。
2、减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是, 许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供 了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲, 只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将 JavaConfig 与 XML 混合匹配是理想的。
3、类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring 容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不 需要任何强制转换或基于字符串的查找。
*4.3.简单描述SpringBoot的自动装配原理*
在SpringBoot的@SpringBootApplication注解中有一个注解@EnableAutoConfiguration
,这个注解的功能就是实现自动装配的。他的作用主要是扫描导入每个jar中的spring.factory中的内容,然后把里面的内容读取到内存中,其实就是读取一堆的配置类。然后引入之后里面有些@Codictional的注解,根据特定的条件帮我们创建bean并注入,省去我们自己配置bean的过程,简化了开发步骤.
*4.4.SpringBoot读取配置文件属性有几种方式*
①利用@Value注解将对应的属性注入到field上
②@ConfigurationProperties在类上使用字段匹配
③通过PropertiesLoaderUtils
利用org.springframework.core.io.support包下的PropertiesLoaderUtils读取配置文件从而获得对应的配置信息PropertiesLoaderUtils.loadProperties(new EncodedResource(new ClassPathResource(location), “UTF-8”));将对应配置文件的信息填入location即可
④通过@PropertySource将属性映射给类的属性
⑤利用Environment (org.springframework.core.env.Environment)
*4.5.如何使用SpringBoot实现异常处理?*
Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通 过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常