1.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, 消息中间件集成

点击查看全部的Spring Boot 启动器列表

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 方式则需要做如下步骤:

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 添加代码

为了演示我们的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


本篇完~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客星云

谢谢认可,希望对你的学习有帮助

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值