Spring Boot 2.x 最佳实践之构建 Hello World web 应用程序
Spring Boot 入门导航
0x01 Spring 与Spring Boot
我们知道Spring的出现简化了Java 企业级应用的开发,从最初的依赖注入容器以及灵活的配置方式,经过多年的发展,已经成为功能丰富,生态完整的企业应用开发全栈框架。
Spring 框架提供了如下功能和子系统:
- Spring Data
- Spring MVC
- Spring Security
- Spring Session
- Spring Cloud
- …
针对这些功能和子系统,我们往往要在xml中配置很多内容,一不小心很容易配置错误。
Spring 团队意识到这个问题后,就推出了Spring Boot.
Spring Boot 提供了一系列名称以spring-boot-starter 开头的启动器帮我们简化项目的依赖。比如,添加了spring-boot-starter-web 就会自动根据传递依赖将spring-mvc,jackson-json,tomcat等引入,然后根据自动配置扫描classpath 加入的依赖,最后加载该依赖的默认配置。
我们开发常用的启动器有如下几个:
- spring-boot-starter-web, web 应用开发
- spring-boot-starter-logging,日志处理
- spring-boot-starter-jpa, 数据存储管理
- spring-boot-starter-security, 安全管理
- spring-boot-starter-data-redis, Redis 数据库集成
- spring-boot-starter-amqp, 消息中间件集成
0x02 使用Spring Boot 构建一个Web应用程序
接下来我们就使用Spring Boot 构建我们的第一个web 应用程序。
该示例英文原版教程:Building an Application with Spring Boot
2.1 选择项目初始化方式
开发一个web 应用,我们首先要做的一件事是建立一个标准的web 骨架。
目前,使用Spring Boot 初始化一个标准的web 骨架,最流行的有如下四种方式.
- 1.start.spring.io 在线构建项目
- 2.使用Spring Tools 4 for Eclipse(简称STS)构建项目
- 3.使用Visual Studio Code (简称VS Code)构建项目
- 4.使用 Intellij Idea 构建项目
如果有条件的话,强烈建议使用Intellij Idea
2.1.1 方式一 通过start.spring.io 初始化项目
- Spring 官方团队为我们提供了一个在线构建工具,可以帮助我们快速初始化一个全新的web项目。
- 在线初始化Spring Boot 项目官网: https://start.spring.io/
2.1.2 方式二:使用Spring Tools 4 for Eclipse(简称STS)初始化项目
- Spring Tools 4 for Eclipse 是Spring 官方团队推出的Java开发集成IDE工具。
- 对Spring完美支持,开源免费且在IDE中集成了
start.spring.io
网址构建项目- Spring Tools 4 for Eclipse 新版本,该版本不支持部署war到tomcat,Jetty 等外部容器中
- Spring Tools 3 for Eclipse 旧版本,该版本支持部署war到tomcat,Jetty 等外部容器中
2.1.3 方式三:使用 Visual Studio Code 初始化项目
- 微软也设计了一款代码编辑器,可以通过安装插件的方式来 支持Spring Boot 开发web 应用项目。
- https://code.visualstudio.com/
2.1.4 方式四:使用 Intellij Idea 构建项目(最佳实践)
- Intellij Idea 是一款Java开发最强大最智能的IDE集成开发工具。
- 它也集成了
start.spring.io
2.2 初始化项目最佳实践
以上四种方法中,使用Intellij Idea 初始化项目是最方便快捷的。
接下来我们就演示下如何使用 Intellij Idea 中初始化一个web项目。
- 首先我们需要双击桌面的Intellij Idea 快捷方式
- 进入欢迎界面,点击如下图所示的 "
Create New Project
"
- 最左侧选择
Spring Initializr
, Project SDK 选择JDK 1.8
, 其他保持默认,点击Next
- 填写项目的基本信息,然后点击Next
Group 输入 com.xingyun
Artifact :输入 spring-boot-with-hello-world-web-sample
其他基本上保持默认即可
效果如下图所示
- 选择web——》Spring Web 后点击Next
如下图所示:
- 选择项目代码保存路径并点击Next.
如图所示:
- 点击完成等待一会,Intellij Idea 就会帮我们初始化好项目。
- 我们可能会看到这样的提示,记得点击
Enable Auto-Import
如果使用
start.spring.io
方式则需要做如下步骤:
- 首先在浏览器中打开 https://start.spring.io/
- 配置项目的初始化信息如下
Project 类型我们选择
Maven
Language 类型选择Java
Spring Boot 我们选择当前最稳定的正式版本2.2.3
Group 我们输入组织名称,这里我输入com.xingyun
Artifact 我们输入项目的名称spring-boot-with-hello-world-web-sample
Dependencies 在搜索框中输入Web
, 然后选中Spring Web
- 当我们点击Generate 或者按Ctrl + 回车键就可以下载这个初始化好的项目了。
- 最后只需要导入这个项目到自己喜欢的IDE中进行开发就好了。
- 值得注意的是这个网址还有一个功能,看到上方的Explore按钮没? 通过它可以知道默认的一些依赖是什么样的。
- 关于如何具体使用这个功能,可以看我公众号写的一篇博文:start.spring.io 发布项目浏览新功能
- 还有一个注意事项就是导入到项目的时候标准的做法应该是选择当前项目的pom.xml 而不是项目文件夹
2.3 添加代码
- 项目由于是一个java maven 项目,因此需要安装 JDK 1.8 + ,Maven 3.5.6 +
- Maven 环境搭建见:Maven环境快速搭建指南
- Maven 基础知识深入学习见 版本依赖管理之 Maven 修炼手册
- 关于settings.xml 配置强烈推荐使用我精心配制的 settings.xml
为了演示我们的Hello World 程序,我们需要添加一些代码。
- 首先创建一个叫做controller 的package
输入包名,controller
- 创建一个叫做
HomeController
的class 类
选中controller 文件夹,右键——》New——》Java Class
输入HomeController ,然后双击 Class
- 修改内容如下
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author qing-feng.zhao
* @description
* @date 2020/1/18 15:54
*/
@RestController
public class HomeController {
@GetMapping(value = "/")
public String home(){
return "Hello World,Spring Boot!";
}
}
值得注意的是,上面的代码等价于下面这种写法
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author qing-feng.zhao
* @description
* @date 2020/1/18 15:55
*/
@Controller
public class HomeController {
@ResponseBody
@RequestMapping(value = "/",method = RequestMethod.GET)
public String home(){
return "Hello World,Spring Boot!";
}
}
代码的意思很简单,告诉Spring 这是一个控制器,当访问
/
请求的时候,返回“Hello World,Spring Boot
”.
2.4 运行程序
- 点击执行按钮
2.5 访问
效果如下所示
0x03 如何安装打包运行一个Spring Boot 项目?
刚才是在IDE中执行的,如何将这个项目打包运行在其他电脑上呢?
3.1 maven 打包
首先需要清理target 下的文件,然后安装相关依赖
如果使用Intellij Idea ,可以通过插件提供的工具
如果不使用IDE,则需要项目根目录下(即,存放pom.xml 的同级目录)运行如下命令:
mvn clean package
命令含义:
首先清理target文件夹中所有内容,然后打包成*.jar或者*.war输出到target根目录
3.2 maven 运行
pom.xml根目录下执行
java -jar spring-boot-with-hello-world-web-sample-0.0.1-SNAPSHOT.jar
命令含义: 运行一个可执行jar
多学几招
- 动态激活配置文件
如果配置文件中包含
application.properties
,application-dev.properties
,application-prod.propertis
,那么可以命令行参数方式重新指定激活的配置文件,比如激活dev
环境的配置命令如下java -jar spring-boot-with-hello-world-web-sample-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
- 动态修改配置参数
我们还可以通过命令行参数修改一些配置属性,比如把默认的端口8080 修改为8081
java -jar spring-boot-with-hello-world-web-sample-0.0.1-SNAPSHOT.jar --server.port=8081
- 后台程序执行
- windows 下后台运行jar 输入命令
javaw -jar spring-boot-with-hello-world-web-sample-0.0.1-SNAPSHOT.jar
- windows 下后台运行jar 输入命令
nohup java -jar spring-boot-with-hello-world-web-sample-0.0.1-SNAPSHOT.jar &
3.3 jar剖析
3.3.1 如何打包的?
如果你仔细观察,会发现spring boot 构建的jar 应用程序不再需要部署到tomcat 容器中,仅仅需要在装有jdk 环境下就可以运行,这种jar 是怎么打包生成的呢?
这源于Spring boot 使用了内嵌了一个默认的tomcat ,集成到了我们的jar中,因此也有人称为胖jar.
如果我打开项目根目录下的pom.xml
就可以看到这个添加了这么一个插件,通过这个插件就可以把一个项目打包成可通过java -jar 执行的jar.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
3.3.2 这个jar 的内部是怎么样的?
解压该jar文件可以看到
BOOT-INF\classes
存放编译后的所有Java源码,包括application.properties
BOOT-INF\lib
项目依赖的所有Jar包
META-INF
存放pom.properties
以及pom.xml
org\springframework\boot\loader
Spring Boot 启动时需要的类
0x04 源码下载
spring-boot-with-hello-world-web-sample
本篇完~