概述
我们刚开始学习JavaWeb的时候,使用Servlet/JSP做开发,一个接口搞一个 Servlet ,很头大,后来我们通过隐藏域或者反射等方式,可以减少 Servlet 的创建,但是依然不方便,再后来,我们引入Struts2/SpringMVC这一类的框架,来简化我们的开发 ,和Servlet/JSP相比,引入框架之后,生产力确实提高了不少。
但是用久了,又发现了新的问题,即配置繁琐易出错,要做一个新项目,先搭建环 境,环境搭建来搭建去,就是那几行配置,不同的项目,可能就是包不同,其他大部分的配置都是一样 的,Java 总是被人诟病配置繁琐代码量巨大,这就是其中一个表现。
那么怎么办?Spring Boot 应运而生
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。
它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。
另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
Spring Boot不是一门新技术,从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。
它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。
使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。
Spring Boot 主要提供了如下功能:
- 为所有基于 Spring 的 Java 开发提供方便快捷的入门体验。
- 开箱即用,有自己自定义的配置就是用自己的,没有就使用官方提供的默认的。
- 提供了一系列通用的非功能性的功能,例如嵌入式服务器、安全管理、健康检测等。
- 绝对没有代码生成,也不需要XML配置。
Spring Boot 的出现让 Java 开发又回归简单,因为确确实实解决了开发中的痛点,因此这个技术得到了非常广泛的使用,现在流行的 Spring Cloud 微服务也是基于Spring Boot,因此,所有的Java 工程师都有必要掌握好Spring Boot。
快速入门
三种创建方式
-
在线创建
这是官方提供的一个创建方式,实际上,如果我们使用开发工具去创建 Spring Boot 项目的话(即第二 种方案),也是从这个网站上创建的,只不过这个过程开发工具帮助我们完成了,我们只需要在开发工具中进行简单的配置即可。
首先打开https://start.spring.io/这个网站,界面如下:
这里要配置的按顺序分别如下:
- 项目构建工具是Maven还是Gradle
Java 后端,目前来看 还是 Maven 为主,因此这里选择第一项。 - 开发语言,这个当然是选择Java了
- Spring Boot 版本,可以看到,目前最新的稳定版是 2.2.7 ,这里我们就是用最新稳定版
- 既然是 Maven 工程,当然要有项目坐标,项目描述等信息了,另外这里还让输入了包名,因为创 建成功后会自动创建启动类。
- Packing 表示项目要打包成jar包还是war包,Spring Boot的一大优势就是内嵌了Servlet容器,打成jar包后可以直接运行,所以这里建议打包成jar包,当然,开发者根据实际情况也可以选择war包。
- 选择构建的JDK版本。
- 最后是选择所需要的依赖,输入关键字如web,会有相关的提示
所有的事情全部完成后,点击最下面的 Generate按钮,或者点击 Alt+Enter 按键,此时会自动下载项目,将下载下来的项目解压,然后用 IntelliJ IDEA 或者 Eclipse 打开即可进行开发。
-
通过开发工具创建
我们也可以通过IDE来创建,以IntelliJ IDEA为例,首先在创建项目时选择 Spring Initializr,如下图:
-
通过Maven创建
首先创建一个普通的 Maven 项目,以 IntelliJ IDEA 为例,创建步骤如下:
输入项目信息,项目生成结构如下:
创建完成后,在 pom.xml 文件中,添加如下依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
添加成功后,再在 java 目录下创建包,包中创建一个名为 MavenBootApplication 的启动类,如下:
@SpringBootApplication
public class MavenBootApplication {
public static void main(String[] args) {
SpringApplication.run(MavenBootApplication.class, args);
}
}
我们在resource下建立static、template目录,创建application.properties配置文件,并配置启动端口为8081
编写一个HelloController:
@RestController
public class HelloController {
@RequestMapping("/")
public String hello(){
return "Hello Boot";
}
}
然后执行MavenBootApplication的 main 方法就可以启动一个 Spring Boot 工程了。
浏览器访问:http://localhost:8081/,效果如下:
配置文件优先级
在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml 。
虽然 properties 文件比较常见,但是相对于 properties 而言,yaml 更加简洁明了,而且使用的场景也 更多,很多开源项目都是使用 yaml 进行配置(例如 Hexo)。
除了简洁,yaml 还有另外一个特点,就是 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如我们在 Spring Cloud Zuul 中的配置),此时我们一般采用yaml。
如果项目中既有properties文件,又有yaml文件,配置项相同的时候,properties文件优先于yaml文件
配置文件位置问题
首先,当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。
- 当前项目根目录下的 config 目录下
- 当前项目的根目录下
- resources 目录下的 config 目录下
- resources 目录下
按如上顺序,四个配置文件的优先级依次降低。如下:
这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。
但是,这也不是绝对的,我们也可以在项目启动时自定义配置文件位置。
例如,现在在 resources 目录下创建一个tpConfig目录,目录中存放一个 application.properties 文件并配置启动端口为8082,那么正常情况下,当我们启动 Spring Boot 项目时,这个配置文件是不会被自动加载的。
我们可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。
文件名问题
对于 application.properties 而言,它不一定非要叫 application ,但是项目默认是去加载名为 application 的配置文件。
如果我们的配置文件不叫 application ,也是可以的,但是需要明确指定配置文件的文件名。
方式和上面指定路径一致,只不过此时的 key 是 spring.config.name 。
首先我们在 resources 目录下创建一个 app.properties 文件,然后在 IDEA 中指定配置文件的文件名:
指定完配置文件名之后,再次启动项目,此时系统会自动去默认的四个位置下面分别查找名为 app.properties 的配置文件。当然,允许自定义文件名的配置文件不放在四个默认位置,而是放在自定义目录下,此时就需要明确指定 spring.config.location 。
配置文件位置和文件名称可以同时自定义。
网友评论