返回介绍

快速入门

发布于 2024-08-18 11:12:34 字数 8849 浏览 0 评论 0 收藏 0

在本节中,我们将逐步指引读者创建一个Spring Boot的基础项目,并且实现一个简单的RESTful API,通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发迅速的特性。

项目构建与解析

系统及工具版本要求

- Java 7及以上版本

- Spring Framework 4.2.7及以上版本

- Maven 3.2及以上版本 /Gradle 1.12及以上版本

本书内容均采用Java 1.8.0_73、Spring Boot 1.3.7调试通过。

构建Maven项目

1.通过官方的Spring Initializr工具来产生基础项目。

2.访问http://start.spring.io/,如下图所示,该页面提供了以 Maven 或Gradle构建Spring Boot项目的功能。

3.选择构建工具 Maven Project、Spring Boot 版本选择1.3.7,填写 Group 和Artifact信息,在Search for dependencies中可以搜索需要的其他依赖包,这里我们要实现RESTful API,所以可以添加Web依赖。

4.单击Generate Project按钮下载项目压缩包。

5.解压项目包,并用IDE以Maven项目导入,以IntelliJ IDEA 14为例。

6.从菜单中选择File-->New-->Project from Existing Sources...。

7.选择解压后的项目文件夹,单击OK按钮。

8.单击Import project from external model并选择Maven,一直单击Next按钮。

9.若你的环境中有多个版本的JDK,选择Java SDK的时候请选择Java 7以上的版本。

工程结构解析

在完成了上面的步骤之后,我们就创建了一个最基础的Spring Boot工程。

如上图所示,Spring Boot的基础结构有三大块(具体路径根据用户生成项目时填写的Group和Artifact有所差异)。

- src/main/java:主程序入口 HelloApplication,可以通过直接运行该类来启动Spring Boot应用。

- src/main/resources:配置目录,该目录用来存放应用的一些配置信息,比如应用名、服务端口、数据库链接等。由于我们引入了Web模块,因此产生了static目录与templates目录,前者用于存放静态资源,如图片、CSS、JavaScript等;后者用于存放Web页面的模板文件,这里我们主要演示提供RESTful API,所以这两个目录并不会用到。

- src/test/:单元测试目录,生成的HelloApplicationTests通过JUnit 4实现,可以直接用运行Spring Boot应用的测试。后文中,我们会演示如何在该类中测试RESTful API。

Maven配置分析

打开当前工程下的 pom.xml 文件,看看生成的项目都引入了哪些依赖来构建 Spring Boot工程,内容大致如下所示。

<? 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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.didispace</groupId>

<artifactId>spring-boot-hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>spring-boot-hello</name>

<description>Demo project for Spring Boot</description>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.7.RELEASE</version>

<relativePath/> <!--lookup parent from repository-->

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

<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>

</plugin>

</plugins>

</build>

</project>

在基础信息部分,groupId和artifactId对应生成项目时页面上输入的内容。另外,我们还可以注意到,打包形式为jar:<packaging>jar</packaging>,正如我们之前所介绍的,Spring Boot默认将该Web应用打包为jar的形式,而非war的形式,因为默认的Web模块依赖会包含嵌入式的Tomcat,这样使得我们的应用jar自身就具备了提供Web服务的能力,后续我们会演示如何启动它。

父项目parent配置指定为spring-boot-starter-parent的1.3.7版本,该父项目中定义了 Spring Boot 版本的基础依赖以及一些默认配置内容,比如,配置文件application.properties的位置等。

在项目依赖dependencies配置中,包含了下面两项。

- spring-boot-starter-web:全栈Web开发模块,包含嵌入式Tomcat、Spring MVC。

- spring-boot-starter-test:通用测试模块,包含JUnit、Hamcrest、Mockito。

这里所引用的web和test模块,在Spring Boot生态中被称为Starter POMs。Starter POMs是一系列轻便的依赖包,是一套一站式的Spring相关技术的解决方案。开发者在使用和整合模块时,不必再去搜寻样例代码中的依赖配置来复制使用,只需要引入对应的模块包即可。比如,开发Web应用的时候,就引入spring-boot-starter-web,希望应用具备访问数据库能力的时候,那就再引入 spring-boot-starter-jdbc 或是更好用的spring-boot-starter-data-jpa。在使用Spring Boot构建应用的时候,各项功能模块的整合不再像传统Spring应用的开发方式那样,需要在pom.xml中做大量的依赖配置,而是通过使用Starter POMs定义的依赖包,使得功能模块整合变得非常轻巧,易于理解与使用。

Spring Boot的Starter POMs采用spring-boot-starter-*的命名方式,*代表一个特别的应用功能模块,比如这里的web、test。Spring Boot工程本身的结构非常简单,大量的学习要点还是将来在对这些Starter POMs的使用之上。在本书中,由于主要讲述Spring Cloud的微服务组件内容,因此对各个Spring Boot的模块内容不做详尽讲解。对于初学者来说,我们也不必一次性地将所有模块的详细用法都掌握牢固,只需了解每个模块能做什么即可。对于本书所使用的Spring Boot 1.3.7版本的所有Starter POMs的功能索引可以参见附录 A,可以根据自身的需要来查询能够支持的模块,再去搜索这个模块的使用方法来实现我们的需求。

最后,项目构建的build部分,引入了Spring Boot的Maven插件,该插件非常实用,可以帮助我们方便地启停应用,这样在开发时就不用每次去找主类或是打包成jar来运行微服务,只需要通过mvn spring-boot:run命令就可以快速启动Spring Boot应用。

实现RESTful API

在Spring Boot中创建一个RESTful API的实现代码同Spring MVC应用一样,只是不需要像Spring MVC那样先做很多配置,而是像下面这样直接开始编写Controller内容:

- 新建package,命名为com.didispace.web,可根据实际的构建情况修改成自己的路径。

- 新建HelloController类,内容如下所示。

@RestController

public class HelloController {

}

@RequestMapping("/hello")

public String index(){

return "Hello World";

}

- 启动该应用,通过浏览器访问http://localhost:8080/hello,我们可以看到返回了预期结果:Hello World。

启动Spring Boot应用

启动Spring Boot应用的方式有很多种:

- 作为一个Java应用程序,可以直接通过运行拥有main函数的类来启动。

- 在Maven配置中,之前提到了spring-boot插件,可以使用它来启动,比如执行mvn spring-boot:run命令,或是直接单击IDE中对Maven插件的工具,例如IntelliJ中的支持:

- 在服务器上部署运行时,通常先使用mvn install将应用打包成jar包,再通过java-jar xxx.jar来启动应用。

编写单元测试

功能实现之后,我们要养成随手写配套单元测试的习惯,这在微服务架构中尤为重要。通常,我们实施微服务架构的时候,已经实现了前后端分离的项目与架构部署。那么在实现后端服务的时候,单元测试是在开发过程中用来验证代码正确性非常好的手段,并且这些单元测试将会很好地支持我们未来可能会进行的重构。

在Spring Boot中实现单元测试同样非常方便,下面我们打开src/test/下的测试入口 com.didispace.HelloApplicationTests 类,编写一个简单的单元测试来模拟HTTP请求,测试之前实现的/hello接口,该接口应返回Hello World字符串。

具体代码实现如下所示。

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(classes=HelloApplication.class)

@WebAppConfiguration

public class HelloApplicationTests {

private MockMvc mvc;

@Before

public void setUp()throws Exception {

mvc=MockMvcBuilders.standaloneSetup(new HelloController()).build();

}

@Test

public void hello()throws Exception {

mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))

.andExpect(status().isOk())

.andExpect(content().string(equalTo("Hello World")));

}

}

代码解析如下。

- @RunWith(SpringJUnit4ClassRunner.class):引入Spring对JUnit4的支持。

- @SpringApplicationConfiguration(classes=HelloApplication.class):指定Spring Boot的启动类。

- @WebAppConfiguration:开启Web应用的配置,用于模拟ServletContext。

- MockMvc对象:用于模拟调用Controller的接口发起请求,在@Test定义的hello测试用例中,perform函数执行一次请求调用,accept用于执行接收的数据类型,andExpect用于判断接口返回的期望值。

- @Before:JUnit中定义在测试用例@Test内容执行前预加载的内容,这里用来初始化对HelloController的模拟。

注意引入下面的静态引用,让status、content、equalTo函数可用:

import static org.hamcrest.Matchers.equalTo;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

快速入门总结

在本节中,我们通过Spring官方的项目构建工具Spring Initializr生成了一个Spring Boot 的基础项目,并详细介绍了该基础项目的依赖结构以及 Maven 的 spring-boot插件,接着在该项目中实现一个输出“Hello World”的RESTful接口以及针对该接口的单元测试用例,完成了一个虽然简单,但涵盖了项目构建、服务开发、单元测试的全套开发内容。由于我们在后续使用Spring Cloud的时候会构建多个Spring Boot的项目来实现微服务架构中的基础设施以及微服务应用,所以通过本节的学习,我们已经具备了通过使用Spring Boot来构建简单微服务项目的基本能力。

在下一节中,我们将对后续在Spring Cloud组件使用过程中会涉及的配置内容做一些介绍和解释。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文