第3章Spring Boot入门 学习目的与要求 本章首先介绍什么是Spring Boot,然后介绍Spring Boot应用的开发环境,最后介绍如何快速构建一个Spring Boot应用。通过本章的学习,掌握如何构建Spring Boot应用的开发环境以及Spring Boot应用。 本章主要内容 Spring Boot概述。 Spring Boot应用的开发环境。 Maven构建Spring Boot应用。 快速构建Spring Boot应用。 从前两章的学习可知,Spring框架非常优秀,但问题在于“配置过多”,造成开发效率低、部署流程复杂以及集成难度大等问题。为解决上述问题,Spring Boot应运而生。作者在编写本书时,Spring Boot的最新正式版是2.1.4.RELEASE,Spring Boot 2.2.0M1里程碑版本已经发布。为了提高程序的稳定性,本书将以Spring Boot 2.1.4.RELEASE版 本编写示例代码。读者测试本书示例代码时,建议使用2.1.4.RELEASE或更高版本。 视频讲解 3.1Spring Boot概述 3.1.1什么是Spring Boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用 的初始搭建以及开发过程。使用Spring Boot框架可以做到专注于Spring应用的开发,无须过多关注样板化的配置。 在Spring Boot框架中,使用“约定优于配置(Convention Over Configuration,COC)”的理念。针对企业应用开发,提供了符合各种场景的springbootstarter自动配置依赖模块,这些模块都是基于“开箱即用”的原则,进而使企业应用开发更加快捷和高效。可以说,Spring Boot是开发者和Spring框架的中间层,目的是帮助开发者管理应用的配置,提供应用开发中常见配置的默认处理(即约定优于配置),简化Spring应用的开发和运维,降低开发人员对框架的关注度,使开发人员把更多精力放在业务逻辑代码上。通过“约定优于配置”的原则,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者。 3.1.2Spring Boot的优点 Spring Boot之所以能够应运而生,是因为它具有以下优点: (1) 使编码变得简单: 推荐使用注解。 (2) 使配置变得快捷: 具有自动配置、快速构建项目、快速集成第三方技术的能力。 (3) 使部署变得简便: 内嵌Tomcat、Jetty等Web容器。 (4) 使监控变得容易: 自带项目监控。 3.1.3Spring Boot的主要特性 1. 约定优于配置 Spring Boot遵循“约定优于配置”的原则,只需很少的配置,大多数情况直接使用默认配置即可。 2. 独立运行的Spring应用 Spring Boot可以以jar包的形式独立运行。使用java jar命令或者在项目的主程序中执行main方法运行Spring Boot应用(项目)。 3. 内嵌Web容器 内嵌Servlet容器,Spring Boot可以选择内嵌Tomcat、Jetty等Web容器,无须以war包形式部署应用。 4. 提供starter简化Maven配置 Spring Boot提供了一系列的starter pom简化Maven的依赖加载,基本上可以做到自动化配置,高度封装,开箱即用。 5. 自动配置Spring Spring Boot根据项目依赖(在类路径中的jar包、类)自动配置Spring框架,极大地减少了项目的配置。 6. 提供准生产的应用监控 Spring Boot提供基于HTTP、SSH、TELNET对运行的项目进行跟踪监控。 7. 无代码生成和XML配置 Spring Boot不是借助于代码生成来实现的,而是通过条件注解来实现的。提倡使用Java配置和注解配置相结合的配置方式,方便快捷。视频讲解 3.2第一个Spring Boot应用 3.2.1Maven简介 Apache Maven是一个软件项目管理工具。基于项目对象模型(Project Object Model,POM)的理念,通过一段核心描述信息来管理项目构建、报告和文档信息。在Java项目中,Maven主要完成两件工作: ①统一开发规范与工具; ②统一管理jar包。 Maven统一管理项目开发所需要的jar包,但这些jar包将不再包含在项目内(即不在lib目录下),而是存放于仓库中。仓库主要包括以下内容。 1. 中央仓库 中央仓库存放开发过程中的所有jar包,例如JUnit,这些jar包都可以通过互联网从中央仓库下载,仓库地址: http://mvnrepository.com。 2. 本地仓库 本地仓库即本地计算机中的仓库。官方下载Maven的本地仓库,配置在“%MAVEN_HOME%\conf\settings.xml”文件中,找到localRepository即可; Eclipse中自带Maven的默认本地仓库地址在“{user.home}/.m2/repository/settings.xml”文件中,同样找到localRepository即可。 Maven项目首先会从本地仓库中获取所需要的jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)下载jar包,并放入本地仓库以备将来使用。 3.2.2Maven的pom.xml Maven是基于项目对象模型的理念管理项目的,所以Maven的项目都有一个pom.xml配置文件来管理项目的依赖以及项目的编译等功能。 在Maven Web项目中,重点关注以下元素。 1. properties元素 在<properties></properties>之间可以定义变量,以便在<dependency></dependency>中引用,代码如下: <properties> <!-- spring版本号 --> <spring.version>5.1.5.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> </dependencies> 2. dependencies元素 <dependencies></dependencies>,此元素包含多个项目依赖需要使用的<dependency></dependency>元素。 3. dependency元素 <dependency></dependency>元素内部通过<groupId></groupId>、<artifactId> </artifactId>、<version></version>3个子元素确定唯一的依赖,也可以称为3个坐标。代码如下: <dependency> <!--groupId组织的唯一标识--> <groupId>org.springframework</groupId> <!--artifactId项目的唯一标识--> <artifactId>spring-core</artifactId> <!--version 项目的版本号 --> <version>${spring.version}</version> </dependency> 3.2.3在Eclipse中创建Maven Web项目 本节在基于Eclipse平台的Java Web应用开发环境(见1.2节)的基础上,创建Maven Web项目。 1. 新建Maven Web项目 在Eclipse中新建Maven Web项目,具体实现步骤如下: (1) 选择菜单File|New|Maven Project,打开如图3.1所示的Select project name and location对话框。 图3.1Select project name and location (2) 单击图3.1中的Next按钮,打开如图3.2所示的Select an Archetype对话框,在该对话框中,选择Archetype为 webapp。 图3.2Select an Archetype (3) 单击图3.2中的Next按钮,打开如图3.3所示的Specify Archetype parameters对话框,在该对话框中,输入一些必要信息,单击Finish按钮。 图3.3Enter a group id for the artifact (4) 创建的Maven Web项目ch3_1的目录结构如图3.4所示。 图3.4项目ch3_1的目录结构 2. 配置Maven Web项目 新建的Maven Web项目,需要修改一些配置,具体步骤如下: (1) 右击项目ch3_1,选择Build Path|Configure Build Path,打开如图3.5所示的Properties for ch3_1对话框。 图3.5Properties for ch3_1 (2) 在图3.5中,选择 Libraries 标签,选中JRE System Library,单击Edit按钮,打开如图3.6所示的Select JRE for the project build path对话框。 图3.6Select JRE for the project build path (3) 在图3.6中,选择Workspace默认的JRE,单击Finish 按钮,最后,单击Apply and Close即可。完成后,项目结构如图3.7所示。 图3.7中src/main/java目录包含项目的Java源代码; src/main/resources目录包含项目所需的资源(如配置文件); src/test/java目录包含用于测试的Java代码; src/main/webapp目录包含Java Web应用程序; 目录由Maven创建。target包含所有编译的类、JAR文件等。当执行 mvn clean 命令时,Maven将清除此目录。 (4) 右击项目名ch3_1,选择Run As|Run on Server,运行ch3_1项目,运行结果如图3.8所示。 图3.7项目结构图 图3.8运行ch3_1项目 3.2.4Maven手工构建第一个Spring Boot应用 本节在3.2.3节Maven Web项目ch3_1的基础上,手工构建一个Spring Boot应用,具体实现步骤如下。 1. 配置Spring Boot的核心启动器 构建基于Spring Boot的应用。首先,在pom.xml文件的<url…/>元素之后添加<parent…/>元素配置Spring Boot的核心启动器springbootstarterparent,代码如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> 2. 添加starter模块 然后,在pom.xml文件的<dependencies…/>元素中增加一个<dependency…/>元素添加需要的starter模块,此处只添加了springbootstarterweb模块。Spring Boot包含了很多starter模块(见4.1.6节),每一个starter模块就是一系列的依赖组合。如springbootstarterweb模块包含Spring Boot预定义的Web开发的常用依赖包(包括Tomcat和springwebmvc)。由于指定了springbootstarterparent的版本,所以此处的springbootstarterweb模块不需要指定版本,Spring Boot将自动选择匹配的版本进行加载。代码如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> Web项目ch3_1的pom.xml文件修改后的内容如下: <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 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.maven.demo</groupId> <artifactId>ch3_1</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>ch3_1 Maven Webapp</name> <url>http://maven.apache.org</url> <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> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>ch3_1</finalName> </build> </project> pom.xml文件修改保存后,Maven将自动在互联网环境下,下载所需的所有jar文件。 3. 编写测试代码 在src/main/java目录下,创建com.test包,并在该包中创建TestController类,具体代码如下: package com.test; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @RequestMapping("/hello") public String hello() { return "您好,Spring Boot!"; } } 上述代码中使用的@RestController注解是一个组合注解,相当于Spring MVC中的@Controller和@ResponseBody注解的组合,具体应用如下: (1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回JSP或者html页面,返回的内容就是return的内容。 (2) 如果需要返回指定页面,则需要用@Controller注解。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。 4. 创建应用程序的App类(启动类) 在com.test包中创建Ch3_1Application类,具体代码如下: package com.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Ch3_1Application { public static void main(String[] args) { SpringApplication.run(Ch3_1Application.class, args); } } 上述代码中使用@SpringBootApplication注解指定该程序是一个Spring Boot应用,该注解也是一个组合注解,相当于@Configuration、@EnableAutoConfiguration和@ComponentScan注解的组合,具体细节在第4章讲解。SpringApplication类调用run方法启动Spring Boot应用。 5. 运行main方法启动Spring Boot应用 运行Ch3_1Application类的main方法后,控制台信息如图3.9所示。 图3.9启动Spring Boot应用后的控制台信息 从上面的控制台信息可以看到Tomcat的启动过程、Spring MVC的加载过程。注意Spring Boot内嵌Tomcat容器,因此Spring Boot应用不需要开发者配置与启动Tomcat。 6. 测试Spring Boot应用 启动Spring Boot应用后,默认访问地址为http://localhost:8080/,将项目路径直接设为根路径,这是Spring Boot的默认设置。 图3.10访问Spring Boot应用 因此,可以通过http://localhost:8080/hello测试应用(hello与测试类TestController中的@RequestMapping("/hello")对应),测试效果如图3.10所示。视频讲解 3.3Spring Boot快速构建 在3.2.4节使用Maven方便快捷地手工构建了一个Spring Boot应用, 但还可以使用更便捷的方法构建Spring Boot应用。本节将讲解两个方便快捷的构建方法: http://start.spring.io和Spring Tool Suite(STS)。 3.3.1http://start.spring.io 使用http://start.spring.io快速构建Spring Boot应用的具体步骤如下。 1. 打开spring.io 在浏览器地址栏中输入“http://start.spring.io”,打开如图3.11所示的界面。 图3.11打开spring.io 2. 填写项目信息 在图3.11中,Project默认选择Maven Project,Language默认选择Java,Spring Boot默认选择最新正式版。Project Metadata的Group输入“com.test”,Artifact输入“ch3_2”,单击More options按钮,Java Version选择11。Project Metadata的信息如图3.12所示。 图3.12Project Metadata 在Dependencies处,输入“web”进行搜索,如图3.13所示。 图3.13Search dependencies to add 单击图3.13中的“+”号添加Web依赖。 3. 创建应用并下载源代码 在图3.11中单击Generate Project按钮,创建Spring Boot应用,并下载源代码。此处下载的源代码是一个简单的基于Maven的应用,解压后的目录如图3.14所示。 图3.14项目目录 4. 导入Maven项目到集成开发工具中 可将ch3_2这个Maven项目导入读者常用的集成开发工具中,如Eclipse。Eclipse导入Maven项目过程如图3.15所示。 图3.15Eclipse导入Maven项目过程 图3.15(续) 图3.16ch3_2项目结构 成功导入ch3_2这个Maven项目后,在Eclipse中显示如图3.16所示的项目结构。 这时,就可以在ch3_2项目中编写自己的Spring Boot应用程序了,如Web应用程序。 3.3.2Spring Tool Suite Spring Tool Suite(STS)是一个定制版的Eclipse,专为Spring开发定制,方便创建、调试、运行、维护Spring应用。通过该工具,可以很轻易地生成一个Spring工程,例如Web工程,最令人兴奋的是工程中的配置文件都将自动生成,开发者再也不用关注配置文件的格式及各种配置了。可通过官网https://spring.io/tools下载Spring Tools for Eclipse,本书采用的版本是springtoolsuite44.1.1.RELEASEe4.10.0win32.win32.x86_64.zip。该版本与Eclipse一样,免安装,解压即可使用。 下面详细讲解如何使用STS集成开发工具快速构建一个Spring Boot应用,具体实现步骤如下。 1. 新建Spring Starter Project 选择菜单File|New|Spring Starter Project,打开如图3.17所示的New Spring Starter Project对话框。 图3.17New Spring Starter Project 2. 选择项目依赖 在图3.17中输入项目信息后,单击Next按钮,打开如图3.18所示的New Spring Starter Project Dependencies对话框,并在图中选择项目依赖,如Web。 图3.18New Spring Starter Project Dependencies 单击图3.18中的Finish按钮,即可完成Web应用的创建。ch3_3的项目结构如图3.19所示。此时,就可以在项目ch3_3中编写自己的Web应用程序了。 图3.19ch3_3的项目结构 STS是一款专为Spring定制的Eclipse,并可以快速构建Spring Boot应用。因此,本书后续章节都采用STS IDE编写示例代码。 3.4本章小结 本章首先简单介绍了Spring Boot应运而生的缘由,然后讲述了如何使用Maven手工构建一个Spring Boot应用,最后演示了如何使用 http://start.spring.io或Spring Tool Suite(STS)快速构建Spring Boot应用。开发者如何构建Spring Boot应用,可根据实际工程需要选择合适的IDE。 习题3 1. Spring、Spring MVC、Spring Boot三者有什么联系?为什么还要学习Spring Boot? 2. 在Eclipse中如何使用Maven手工构建Spring Boot的一个Web应用?