1、Spring的简介
Spring Boot官网地址:https://spring.io/projects/spring-boot/ 目前最新的稳定版本是2.1.5
Spring Boot是Spring家族的一个产品
SSM框架创建的Web工程,要使项目跑起来,需要大量的配置,有时候搭建环境都要搭建半天,各种配置文件,XML文件等等。需要我们手动配置的地方非常多,而且配置很多都是重复的,每一个工程都要去搭建环境,这样不仅徒增工作量,而且在跨平台部署时容易出问题。而使用Spring Boot可以让我们快速创建一个基于Spring的项目,而让这个Spring项目跑起来我们只需要添加少量的配置就可以了。Spring Boot主要有如下核心功能:
1、独立运行的Spring项目(Spring Boot可以以jar包的形式来运行,运行一个Spring Boot项目,我们只需要通过java -jar xx.jar类运行,非常方便)。
2、内嵌Servlet容器(Spring Boot可以内嵌tomcat,这样我们无需以war包的形式部署项目)
3、提供starter简化Maven配置(使用Spring或者SpringMVC我们需要添加大量的依赖,而这些依赖很多都是固定的,这里Spring Boot通过starter能够帮助我们简化Maven配置)。
4、自动配置Spring
5、准生产的应用监控
6、无代码生成和xml配置
Spring Boot目前最新的2.1.5版本对运行环境的要求:
1、JDK8以上
2、编译java11
3、Spring 5.1.7
4、构建工具 Maven3.3以上,Grade4.4以上
5、Tomcat 9.0,servlet4.0(自带)
2、Spring Boot项目的创建
Spring Boot本质上就是一个Maven工程,但是它在创建过程中需要添加parent和Maven插件,初学者总会怀疑它到底是不是Maven工程,实际上它就是Maven,因为它要加的东西比较多,所以我们有几种不同的方式来创建它。
2.1 在线创建
在线创建网址https://start.spring.io/
使用开发工具打开解压后的文件就可以在里面进行开发了2.2 开发工具创建
然后输入项目名包名等
选择依赖
创建成功,和在线创建的是一样的
2.3 使用Maven创建
使用Maven创建无论是在什么情况下都能创建成功,不依赖网站,首先创建一个普通的Maven工程,在pom.xml文件中添加web依赖,因为没有添加parent所以需要手动添加版本号
<dependency>
<!-- spring-boot-starter-xx是spring boot官方提供的依赖
xx-spring-boot-starter就不是官方提供的
-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
</dependencies>
创建Spring Boot的启动类
@SpringBootApplication
public class App {
public static void main(String[] args){
SpringApplication.run(App.class,args);
}
}
创建一个控制器用于测试
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello spring boot!";
}
}
通过启动App类来启动Spring Boot工程
3、Spring Boot中的parent的含义
对于大家来说有没有parent最直观的感受就是,在pom.xml文件中要不要加版本号,有parent要加版本号,版本号在parent中都是定义好了的。那么parent到底要不要加呢?这是分情况的,我们现在自己是可以加的,但是如果是在公司里面开发,不一定加,因为一个Maven项目只能有一个parent,如果加了这个默认的parent,意味着我就不能再加其他的parent了,但是在公司里面,一般我们的项目可能需要集中管理,公司自己会提供一个父工程,所有的工程的parent都要是公司定义好的parent,这样就只能继承自公司的parent,就不能自己写parent了。那这种时候parent里面提供的东西,我们该如何处理。
parent提供的功能包括:
1、定义了java编译版本为1.8
2、使用了UTF-8格式编码
3、继承自spring-boot-dependencies,这里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
4、执行打包操作的配置
5、自动化的资源过滤
6、自动化的插件配置
7、针对application.properties和application.yml的资源过滤,包括通过profile定义的不同环境的配置文件,例如application-dev.properties和application-dev.yml
请注意,由于application.properties和application.yml文件接受Spring样式占位符$ {…}, 因此Maven过滤更改为使用@ … @占位符,当然开发者可以通过设置名为resource.delimiter的Maven屈性来覆盖@ … @占位符。
当我们创建一个Spring Boot项目后,我们可以在本地Maven仓库中看到这个具体的parent文件在本地仓库的C:\Users\豆子.m2\repository\org\springframework\boot目录下可以找到你要找的parent的名称目录下,找到使用的版本名的文件下,里面有一个.pom文件,文件里面有具体的配置。
版本相关配置
文件过滤
它自己也有一个parent,里面定义了所有依赖的版本号。
如果要使用公司的parent,那就不能自己定义parent了,这就只能自己把parent中所定义的配置,版本号,资源过滤等等自己手动定义好。或者把这些配置定义到公司指定的parent上
可以自己定义dependencyManagement就不用写版本号了
4、项目结构介绍
5、启动类
我们发现Spring Boot项目一创建就可以使用,可以扫描到所有的注解,那么Spring Boot没有XML文件,那就肯定是像上一篇一样,是用注解的方式扫描的。我们可以看到在启动类中加了一个注解叫@SpringBootApplication,进入这个注解我们可以看到
而在@SpringBootConfiguration注解中其实就是三个注解组合的。
第一个@Configuration注解(配置类注解)
第二个@EnableAutoConfiguration注解是开启SpringMVC的自动化配置。
第三个@ComponentScan注解(默认扫描当前类所在包下面的所有bean,以及当前类所在的包下面的子包下面的所有备案)所以以下配置不写具体的包位置,只除去了不用扫描的,所以我们在定义的时候一般会把启动类放在根包下,如果非要放在其他包,那就在启动类从新指定@ComponenScan,重新指定basepackage。
@SpringBootApplication是一个组合注解,组合注解就是把几个注解组合在一起,它具有那几个注解的所有功能。也可以在启动类的前面加这三个注解,同样能实现。6、banner配置
banner就是在Spring Boot工程启动的时候出现的横幅:
它可以自定义:在resources下定义一个文件banner.txt,启动时就会按照你指定的文件来显示,否则就按自定义的来。定制字体网站http://patorjk.com/software/taag/
如果不想使用这个横幅也可以关掉,在启动类中这样配置:
@SpringBootApplication
public class Demo02Application {
public static void main(String[] args) {
SpringApplication build = new SpringApplicationBuilder(Demo02Application.class).build();
build.setBannerMode(Banner.Mode.OFF);
build.run(args);
// SpringApplication.run(Demo02Application.class, args);
}
}
这样再次启动工程就没有banner了。
7、web容器配置
当Spring Boot工程启动的时候,默认的端口是8080,用的tomcat不是本地的tomcat,而是内嵌在Spring Boot里面的tomcat。那么对于在这个tomcat的配置,我们该如何去修改呢?(本地的tomcat可以在tomcat目录下server.xml文件下修改)
在application.properties文件中修改
#修改tomcat的端口号
server.port=8088
#解决乱码问题:http://www.javaboy.org/2019-04-09/javaweb-encoding.html
#post乱码,post参数如果放在请求体里面(也可以放在地址栏),request.setCharacterEncoding。在web.xml文件中配置的过滤器,解决的也是请求体的乱码问题,以及响应的乱码问题
#get请求的乱码,get参数放在url地址里面,所以要修改地址栏的url编码,也就是以前在tomcat文件中的server.xml中配置的URLEncoding
server.tomcat.uri-encoding=UTF-8
#工程名,路径前缀
server.servlet.context-path=/aaa
配置了server.servlet.context-path=/aaa后,项目启动访问就要在路径前面加上/aaa
Spring Boot内嵌Tomcat,那如果我不想用Tomcat,想换一个其他的容器,又该如何配置呢?
把tomcat从依赖中排除掉,再加入需要的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 加入jetty依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
现在点击启动,就是以jetty来启动的了,配置文件中的
server.port=8088和server.servlet.context-path=/aaa在jetty中也同样适用。但是server.tomcat.uri-encoding=UTF-8是没有用的。jetty有自己的配置,可以重新配置。