文章目录
SpringBoot特性
- 更广泛的+快速的Spring开发体验
- 一系列开箱即用的starter
- 一系列非功能性的自动化配置
- 没有XML配置文件生成
三种创建方式
系统要求
Spring Boot 目前最新版本是 2.1.4,要求至少 JDK8,集成的 Spring 版本是 5.1.6
构建工具版本要求如下:
Build Tool | Version |
---|---|
Maven | 3.3+ |
Gradel | 4.4+ |
内置的容器版本分别如下
Name | Vesion |
---|---|
Tomcat 9.0 | 4.0 |
Jetty 9.4 | 3.1 |
Undertow 2.0 | 4.0 |
在线创建
首先打开 https://start.spring.io
这个网站,如下:
这里要配置的按顺序分别如下:
- 项目构建工具是
Maven
还是Gradle
- 开发语言
- Spring Boot 版本
- 既然是
Maven
工程,当然要有项目坐标,项目描述等信息了,另外这里还让输入了包名,因为创建成功后会自动创建启动类 Packing
表示项目要打包成 jar 包还是 war 包,Spring Boot 的一大优势就是内嵌了Servlet
容器,打成jar
包后可以直接运行,所以这里建议打包成jar
包,当然,开发者根据实际情况也可以选择war
包- 选择构建的 JDK 版本
- 最后是选择所需要的依赖,输入关键字如
web
,会有相关的提示,这里我就先加入 web 依赖
所有的事情全部完成后,点击最下面的 Generate Project
按钮,或者点击 Alt+Enter
按键,此时会自动下载项目,将下载下来的项目解压,然后用 IntelliJ IDEA 或者 Eclipse 打开即可进行开发。
使用工具创建创建
IntelliJ IDEA
然后点击 Next ,填入 Maven 项目的基本信息,如下:
再接下来选择要添加的依赖,如下图:
勾选完成后,点击 Finish 完成项目的创建
STS
首先右键单击,选择 New -> Spring Starter Project ,如下图:
然后在打开的页面中填入项目的相关信息,如下图:
一路点击 Next ,最后点击Finish完成项目的创建
Maven 创建
首先创建一个普通的 Maven 项目,以 IntelliJ IDEA 为例,创建步骤如下:
注意这里不用选择项目骨架(如果大伙是做练习的话,也可以去尝试选择一下,这里大概有十来个 Spring Boot 相关的项目骨架),直接点击 Next ,下一步中填入一个 Maven 项目的基本信息,如下图:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
添加成功后,再在 java 目录下创建包,包中创建一个名为 App 的启动类,如下:
@EnableAutoConfiguration
@RestController
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
@EnableAutoConfiguration
注解表示开启自动化配置
然后执行这里的 main 方法就可以启动一个 Spring Boot 工程了
项目结构
使用工具创建出来的项目结构大致如下图:
启动类上的注解
@SpringBootApplication
public class PropertiesApplication {
public static void main(String[] args) {
SpringApplication.run(PropertiesApplication.class, args);
}
}
@SpringBootApplication
由多个注解的组合而成:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
SpringBoot中parent的理解
pom.xml中有如下一段引用:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
基本功能
当我们创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent
,也可以不继承自它,我们先来看第一种情况。先来看 parent 的基本功能有哪些?
- 定义了Java的编译版本为1.8
- 使用了UTF-8格式编码
- 继承自
spring-boot-dependencies
,这个里面定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号 - 执行打包操作的配置
- 自动化的资源过滤
- 自动化的插件配置
- 针对
application.properties
和application.yml
的资源过滤,包括通过profile
定义的不同环境的配置文件,例如application-dev.properties
和application-dev.yml
源码分析
当我们创建一个SpringBoot项目后,我们可以在本地的Maven仓库中看到这个具体的parent
文件,以2.1.4为例路径是:
repository\org\springframework\boot\spring-boot-starter-parent\2.1.4.RELEASE\spring-boot-starter-parent-2.1.4.RELEASE.pom
我们可以看到,它继承自 spring-boot-dependencies
,这里保存了基本的依赖信息,另外我们也可以看到项目的编码格式,JDK 的版本等信息,当然也有我们前面提到的数据过滤信息。最后,我们再根据它的 parent 中指定的 spring-boot-dependencies 位置,来看看 spring-boot-dependencies 中的定义:
不用parent
但是并非所有的公司都需要这个 parent ,有的时候,公司里边会有自己定义的 parent ,我们的 Spring Boot 项目要继承自公司内部的 parent ,这个时候该怎么办呢?
一个简单的办法就是我们自行定义 dependencyManagement
节点,然后在里边定义好版本号,再接下来在引用依赖时也就不用写版本号了,像下面这样:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这样写之后,依赖的版本号问题虽然解决了,但是关于打包的插件、编译的 JDK 版本、文件的编码格式等等这些配置,在没有 parent 的时候,这些统统要自己去配置。