Spring Boot入门(一):搭建Spring Boot项目
从本篇博客开始,我们开始进入 Spring Boot 的世界,它的出现使 Spring 的开发变得更加简洁,因此一经推出受到众多程序员的喜爱。
作为 Spring Boot 系列的第一篇博客,我们先来讲解下如何搭建 Spring Boot 项目。
如果你直接就使用的是 Spring Boot,建议你有时间可以学习下 Spring,这样更能体会到 Spring Boot 带来的便利。
Spring 系列博客地址:https://www.cnblogs.com/zwwhnly/category/1407891.html。
1. 搭建 Spring Boot 项目的 2 种方式
1.1 方式 1:使用官网搭建
首先,在浏览器中,输入 https://start.spring.io/,会看到如下界面:
从上图可以看出,Project 默认值是 Maven Project,Language 默认值是 Java,Spring Boot 默认版本是 2.1.9,因为符合我们的需求,所以这 3 项我们不做修改。
然后填写项目信息,即 Project Metadata 项,如下所示:
上图中的 Group,可理解为组织,一般为域名反过来,如果域名是 zwwhnly.com,这里就填 com.zwwhnly。
Artifact,可理解为项目名,比如我这里填写的是 springboot-action。
接着选择依赖项,比如要添加 Web 依赖项,这里可以按关键字搜索 Web 依赖项,如下所示:
也可以按分类找到 Web 依赖项,如下所示:
不管以哪种方式添加,最终的结果都是下面这样的:
最后,点击”Generate“按钮生成项目代码:
解压后的代码目录如下图所示:
从图中可以看出,此处生成的其实就是一个简单的基于 Maven 的项目,你可以使用自己喜欢的开发工具打开该项目,比如 IntelliJ IDEA。
1.2 方式 2:使用 IDEA 搭建
首先,打开开发工具 IntelliJ IDEA,依次点击菜单 File--New--Project 打开新建项目对话框,先选中左侧的“Spring Initializr”,然后选择项目要使用的 JDK 版本,如 1.8,点击 "Next" 按钮:
按照下图中的提示填写好项目信息、打包方式、Java 版本等信息,点击“Next" 按钮:
选择项目要使用的依赖项(如 Spring Web)以及 Spring Boot 的版本(如 2.1.9),点击”Next“按钮:
确认好项目名称和项目要保存的路径,点击“Finish" 按钮,如果保存的路径不存在,会提示是否自动创建该目录,点击“OK”即可:
创建好的项目结构图如下所示:
Maven 依赖树如下所示:
2. pom.xml 讲解
默认生成的 pom.xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zwwhnly</groupId>
<artifactId>springboot-action</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-action</name>
<description>Spring Boot Action Code</description>
<span class="hljs-tag"><<span class="hljs-name">properties</span>></span>
<span class="hljs-tag"><<span class="hljs-name">java.version</span>></span>1.8<span class="hljs-tag"></<span class="hljs-name">java.version</span>></span>
<span class="hljs-tag"></<span class="hljs-name">properties</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dependencies</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-test<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">scope</span>></span>test<span class="hljs-tag"></<span class="hljs-name">scope</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependencies</span>></span>
<span class="hljs-tag"><<span class="hljs-name">build</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-maven-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"></<span class="hljs-name">build</span>></span>
</project>
关于 pom.xml 的整个讲解,可以参考我之前写的博客:Spring 入门 (四):使用 Maven 管理 Spring 项目 ,这里我们只讲解下该文件和之前不同的地方。
第 1 个值得注意的地方是文件中的 parent 标签:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
该标签用于添加 Spring Boot 的父级依赖,其中 spring-boot-starter-parent 是一个特殊的 starter,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖可以省去 version 标签。
举个具体的例子,我们往 pom.xml 中添加如下依赖:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
</dependency>
和默认的 2 个依赖一样,我们并未指定该依赖的 version 版本,但是在 Maven 的依赖树里,却能看到这 3 个依赖使用的版本,如下所示:
这就是 parent 标签中引用 spring-boot-starter-parent 的作用,我们可以通过以下文件来查看它都提供了哪些依赖的默认版本信息:
在该文件中,我们可以找到 spring-boot-starter-web、spring-boot-starter-test、amqp-client 指定的版本信息:
<properties>
<rabbit-amqp-client.version>5.4.3</rabbit-amqp-client.version>
</properties>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>${rabbit-amqp-client.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
</dependencies>
可以发现,指定的版本正是 Maven 依赖树上看到的版本信息。
不过可以通过指定 version 版本来覆盖默认的版本,比如我们将 amqp-client 的依赖信息修改为:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.0</version>
</dependency>
此时在 Maven 依赖树看到的 amqp-client 的版本就变为了 5.7.0:
第 2 个值得注意的地方是,文件中添加了 Spring Boot 的编译插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
这里我们也没有指定 version,所以使用的是默认的版本 2.1.9.RELEASE(和上面使用 amqp-client 的原理一样):
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.9.RELEASE</version>
</plugin>
3. 简单演示
找到启动类 SpringbootActionApplication(名称一般为 ArtifactId+Application), 看到默认代码如下:
package com.zwwhnly.springbootaction;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootActionApplication {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> {
SpringApplication.run(SpringbootActionApplication.class, args);
}
}
为方便演示,我们暂时在启动类中新增一个 Api 接口:
package com.zwwhnly.springbootaction;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringbootActionApplication {
<span class="hljs-meta">@RequestMapping("/")</span>
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">index</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> <span class="hljs-string">"Hello Spring Boot"</span>;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> {
SpringApplication.run(SpringbootActionApplication.class, args);
}
}
在启动类中右键,然后选择运行项目,看到如下信息:
在浏览器中访问 http://localhost:8080/,会看到如下信息:
@RestController 注解和 @RequestMapping 注解其实是 Spring MVC 相关的注解,并不是 Spring Boot 特有的,关于 Spring MVC 的相关技术,可以查看以下博客:
- Spring 入门 (十二):Spring MVC 使用讲解
- Spring 入门 (十三):Spring MVC 常用注解讲解
- Spring 入门 (十四):Spring MVC 控制器的 2 种测试方法
4. 关闭 Banner
其实刚刚启动项目时我们已经看到了 Spring Boot 的 Banner,那么你不禁要问什么是 Spring Boot 的 Banner 呢?
其实就是下图中红色标记的地方:
也许有人会觉得每次启动都显示这些信息并没有实际意义,那么我们如何关闭它呢?
4.1 通过代码关闭
原代码:
public static void main(String[] args) {
SpringApplication.run(SpringbootActionApplication.class, args);
}
修改后:
public static void main(String[] args) {
//SpringApplication.run(SpringbootActionApplication.class, args);
<span class="hljs-type">SpringApplication</span> <span class="hljs-variable">springApplication</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">SpringApplication</span>(SpringbootActionApplication.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
4.2 通过配置文件关闭
默认情况下,新建的 Spring Boot 项目都有个空的 application.properties 配置文件,可以添加如下配置:
spring.main.banner-mode=off
重新启动项目,效果如下图所示:
5. 源码及参考
源码地址:https://github.com/zwwhnly/springboot-action.git,欢迎下载。
汪云飞《Java EE 开发的颠覆者:Spring Boot 实战》