如何正确的使用 Spring Boot ?

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

通过上一课时的学习,相信你已经掌握了环境搭建与配置,那么接下我们就一起来探讨如何正确的使用 Spring Boot 开发我们应用。

Spring Boot 是什么?能做什么?

Spring Boot 是一个快速开发的脚手架,那么它可以做什么呢?Spring Boot 在传统 Spring 框架的基础上做了创新和优化,将开发人员从以往烦琐的配置工作中解放出来,并提供了大量即插即用的集成化组件,从而解决了各种组件之间复杂的整合过程,大大提高了开发效率,降低了维护成本。用通俗的说法解释一下,就是 Spring Boot 是一个基于 Spring 的用来提升效率的一个框架,它可以让编码更加的简单,让你的配置管理更加的简单,让部署更加的简单。

那么是 Spring Boot 有哪些特性呢?

  • 创建独立的 Spring 应用程序。
  • 嵌入的 Tomcat、Jetty 服务器运行 Spring Boot 程序,无需部署WAR文件。
  • 简化 Maven 配置。
  • 自动配置 Spring。
  • 提供生产就绪型功能,如指标,健康检查和外部配置。
  • 基本可以完全不使用 XML 配置文件,采用注解配置。

下面我们还是快速创建一个 Spring Boot的应用。

编写第一个 Spring Boot 应用

针对一个基于 Spring Boot 开发的 Web 应用程序,其代码组织方式需要遵循一定的项目结构。如果不做特殊说明,我们都将使用 Maven 来管理项目工程中的结构和包依赖。一个典型的 Web 应用程序的项目结构如下图所示:

image.png  

在上图中,有几个地方需要特别注意,我也在图中做了专门的标注,分别是包依赖、启动类、控制器类以及配置,让我们讲此部分内容分别做一些展开。  

需求

我们编写的第一个 Spring Boot 希望它满足两点需求。

第一,整合 Spring MVC。

第二,有一个叫 test 的路径。这里说明一下,从现在开始,我们的课程会把路径称为端点。这样做主要是为了和官方文档以及市面上的文章接轨。工作中总是避免不了要查阅官方文档或者别人的技术博客。如果别人使用的术语你都看不懂,那就尴尬了。

怎么样创建 Spring Boot应用呢?

Spring Boot 官方提供了一个叫 Spring Initializr 的工具,通过这个工具可以快速的创建 Spring Boot 应用。

new -> Module

image.png

在左边有一个 Spring Initializr 的选项。

image.png

在右边,有很多项目基本信息:

Server URL 使用默认值 start.spring.io。可以通过直接设定,比如写入阿里云地址 start.aliyun.com, 这里需要连接 spring 官方服务器,因为网络原因经常无法访问,所以采用国内阿里云镜像生成工程初始代码。这里我们采用默认的即可。start.spring.io 是什么,后面在介绍。

name 项目名称,这个根据自己的项目的具体情况填写。

Location 项目的路径,也就是本地存储路径。

Type 项目构建类型,一般会使用 Maven 或者 Gradle 构建 Spring Boot。有同学可能不了解 Maven 或者是 Gradle,这是 Java 圈子里面最常用的构建工具。可以用来管理 jar 版本,下载 jar 包,编译以及打包等等。不了解 Maven 或者是 Gradle ,学习本门课程并没有太大的障碍,这点大家可以不用担心,本课程是用的是 Maven。

Language 开发语言。用什么语言去开发 Spring Boot,Spring Boot 支持用多种语言开发,你可以任选一种语言开发,这里采用 Java 语言开发。

Group 表示组织名称,一般是团队的唯一标尺。比如你公司域名是 itbbfx.com,那么组织名称就是 com.itbbfx。

Artifact 模块名称,也是项目的 Artifact  的 Id,一般是项目的唯一标识。公司下面肯定会开发好多项目,那么就需要根据 Artifact 来区别,这是约定俗成的规范,防止包名冲突。

Package name 项目的包 。

Project SDK JDK 版本。

Java 是 Java 版本,使用什么 Java 大版本开发 Spring Boot 应用程序。

Packaging 最终生成包的类型,就是你这个项目的打包方式,Spring Boot 的支持打成 jar 包或者是 war 包。使用 jar 打包的方式是 Spring Boot 更加推介的一种打包方式。

各项基本信息输入完成后即可点击“Next”进入下一步。

可以选择spring boot 的版本,需要注意的是带有后缀这种版本都不是正式的,我们选择当前最新的正式版 2.5.0。由于我们的应用需要整合 Spring MVC,需要选择 Spring Web。

image.png

各项基本信息输入完成后即可点击“finish”创建项目。这样子,我们的 Spring Boot的应用就已经建好了,是不是非常的傻瓜化。

start.spring.io 是干什么的呢?我们来揭晓谜底。其实是一个在线版的 Spring Initializr,这使用方式和刚刚是类似的。完成项目基本信息。

image.png   最后点击 GENEGENERATE CTRL + 一下 ,然后就可以下载一个压缩包。你把这个压缩包解压,然后导入到 IDEA 中, 就可以开发 Spring Boot 应用了。

这个在线版的 Spring Initializr 有什么用呢?比方所使用的 ide 没有整个 Spring Initializr,但是你又希望用 Spring Initializr 快速的创建 Spring Boot 应用,这个时候就非常的实用了。

Maven 依赖

项目工程创建成功,打开 pom.xml 文件,确认 Maven 依赖 spring-boot-starter-web 这个应用比利整合了 Spring MVC 。同时引入了测试相关依赖以及 Maven 插件,用于打包。

 

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.5.0</version>
        </plugin>
    </plugins>
</build>
复制代码

Spring Boot 提供了一系列 starter 工程来简化各种组件之间的依赖关系。以开发 Web 服务为例,我们需要引入 spring-boot-starter-web 这个工程,而这个工程中并没有具体的代码,只是包含了一些 pom 依赖。

image.png

可以看到,这里包括了传统 Spring MVC 应用程序中会使用到的 spring-web 和 spring-webmvc 组件,因此 Spring Boot 在底层实现上还是基于这两个组件完成对 Web 请求响应流程的构建。如果我们使用 Spring Boot 2.5.0 版本,你会发现它所依赖的 Spring 组件都升级到了 5.X 版本。

值得一提的是,Spring Boot 应用一旦引入 Spring-Web 依赖。因为 Spring Boot 一般是通过 RESTful API 对外暴露接口,增加 Spring-Web 会在应用中内嵌 Tomcat,使 Spring Boot 应用具备 HTTP 响应能力。

一旦 spring-boot-starter-web 组件引入完毕,我们就可以充分利用 Spring Boot 提供的自动配置机制开发 Web 应用程序。

启动类

使用 Spring Boot 的最重要的一个步骤是创建一个 Bootstrap 启动类。Bootstrap 类结构简单且比较固化,如下所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class SpringBootDemoApplication {


    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }


}
复制代码

显然,这里引入了一个全新的注解 @SpringBootApplication。在 Spring Boot 中,添加了该注解的类就是整个应用程序的入口,一方面会启动整个 Spring 容器,另一方面也会自动扫描代码包结构下的 @Component、@Service、@Repository、@Controller 等注解并把这些注解对应的类转化为 Bean 对象全部加载到 Spring 容器中。

编写测试

我们来写 test 的端点。Bootstrap 类为我们提供了 Spring Boot 应用程序的入口,相当于应用程序已经有了最基本的骨架。接下来我们就可以添加 HTTP 请求的访问入口,表现在 Spring Boot 中也就是一系列的 Controller 类。这里的 Controller 与 Spring MVC 中的 Controller 在概念上是一致的,一个典型的 Controller 类如下所示:

@RestController
public class TestController {


    @GetMapping("/test")
    public String test(){
        return "test";
    }
}
复制代码

请注意,以上代码中包含了 @RestController 和 @GetMapping 这两个注解。其中,@GetMapping 的作用等同于指定了 GET 请求的 @RequestMapping 注解,而 @RestController 注解是传统 Spring MVC 中所提供的 @Controller 注解的升级版,相当于就是 @Controller 和 @ResponseEntity 注解的结合体,会自动使用 JSON 实现序列化/反序列化操作。

配置文件

我们注意到,在 src/main/resources 目录下存在一个 application.properties 文件,这就是 Spring Boot 中的主配置文件。例如,我们可以将如下所示的端口、服务名称以及数据库访问等配置信息添加到这个配置文件中:

server.port=8080
复制代码

事实上,Spring Boot 提供了强大的自动配置机制,如果没有特殊的配置需求,开发人员完全可以基于 Spring Boot 内置的配置体系完成诸如数据库访问相关配置信息的自动集成。

建议良好的习惯,在启动应用之前, 执行下mvn clean install,确保能够构建成功再去启动。这主要是为了防止有 jar 包没有下载完整,导致启动失败,或者说应用各种报错,确保构建成功再去启动,一定要养成这样的习惯。

static

这个目录是用来做什么的呢?他是用来存放静态文件的。什么是静态文件啊,就比 js、css 、和HTML 以及图片等等,这就叫静态文件。

templates

这是用来存放模板文件的。什么是模板文件的?大家知道 Spring MVC 是支持多种视图模式的,比如我们可以用 jsp、freemarker 等等。那么 jsp、 freemarker 就是模板引擎。

那么在 Spring Boot 里面支持哪些模板引擎呢?我们可以看官方文档,它主要支持 Thymeleaf、FreeMarker 以及 Groovy 模板引擎。现在越来越多的应用使用前后端分离的方式开发,模板引擎用的越来越少了。并且我们的课程中也不会使用到这里面的任何一款模板引擎,所以具体我们就不介绍。

怎么样启动应用呢?

找到 SpringBootDemoApplication 类。这类上有个 main 方法启动,点击运行即可。

image.png

访问项目

我们的 Spring Boot 应用启动成功之后,通过打开浏览器,在地址栏输入 http://localhost:8080/test 就可以访问的应用了。

image.png

到目前为止,是不是说明我们两个需求都已经达到了。

这是在 idea 上面的启动。那我们实际项目中怎么样部署呢?我们可以看到这个 target 目录里面有个 jar,这个 jar 包是一个可以执行的,jar 可以直接用来部署。

image.png

怎么样启动这个 jar 包呢?执行命令是:

java -jar xxx.jar
复制代码

通过测试,我们 Spring Boot 依然可以运行,可以访问。

Spring Boot VS 传统开发

我们可以对比一下 Spring Boot 的开发应用和以前的传统的 Web 开发应用的方式,它是不一样的。

我们以前开发应用是不是有一大堆的配置文件,比如说什么 web.xml、application.xml、spring-web.xml 等等,使用 Spring Boot 开发应用,这些配置就不需要了。

外我们以前部署应用的时候,是不是把应用打成 war 包,然后i放到 Tomcat 里面去,或者说其他的 web 服务器。然后再去把 Tomcat 或者说其他的服务器启动起来。那现在呢,现在直接一个 jar 包就直接启动我们的应用,是不是非常的方便啊?

总结

案例编写是掌握一个框架应用方式的最好方法。本课是是一款以案例驱动的 Spring Boot 应用程序开发课程,我们主要针对一个典型的 Spring Boot Web 应用程序的组织结构和开发方式进行了详细介绍。

Guess you like

Origin juejin.im/post/7031474144130646029