官网-使用Spring Boot构建应用程序

本指南提供了有关Spring Boot如何帮助您加速应用程序开发的示例。 阅读更多的Spring入门指南时,您将看到更多Spring Boot用例。 本指南旨在使您快速了解Spring Boot。 如果要创建自己的基于Spring Boot的项目,请访问Spring Initializr,填写项目详细信息,选择选项,然后将捆绑的项目下载为zip文件。

你会建立什么

您将使用Spring Boot构建一个简单的Web应用程序,并向其中添加一些有用的服务。

你需要什么

约15分钟

最喜欢的文本编辑器或IDE

JDK 1.8或更高版本

Gradle 4+或Maven 3.2+

您还可以将代码直接导入到IDE中:

弹簧工具套件(STS)

IntelliJ IDEA

如何完成本指南

像大多数Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。 无论哪种方式,您最终都可以使用代码。

要从头开始,请继续至从Spring Initializr开始。

要跳过基础知识,请执行以下操作:

下载并解压缩本指南的源存储库,或使用Git对其进行克隆:git clone https://github.com/spring-guides/gs-spring-boot.git

光盘进入gs-spring-boot/initial

继续创建一个简单的Web应用程序。

完成后,您可以根据gs-spring-boot/complete中的代码检查结果。

了解使用Spring Boot可以做什么

Spring Boot提供了一种构建应用程序的快速方法。它查看您的类路径和配置的Bean,对丢失的内容做出合理的假设,然后添加这些项目。借助Spring Boot,您可以将更多精力放在业务功能上,而不必在基础架构上。

以下示例显示了Spring Boot可以为您做什么:

Spring MVC是否在类路径中?您几乎总是需要几个特定的bean,Spring Boot会自动添加它们。 Spring MVC应用程序还需要一个servlet容器,因此Spring Boot会自动配置嵌入式Tomcat。

码头上有码头吗?如果是这样,您可能不想要Tomcat,而是想要嵌入式Jetty。 Spring Boot会为您处理该问题。

Thymeleaf在类路径上吗?如果是这样,那么必须始终将一些bean添加到您的应用程序上下文中。 Spring Boot为您添加了它们。

这些只是Spring Boot提供的自动配置的一些示例。同时,Spring Boot不会妨碍您。例如,如果Thymeleaf在您的路径上,则Spring Boot会自动将SpringTemplateEngine添加到您的应用程序上下文中。但是,如果您使用自己的设置定义自己的SpringTemplateEngine,则Spring Boot不会添加一个。这样您就可以毫不费力地控制自己。

Spring Boot不会生成代码或对文件进行编辑。相反,当您启动应用程序时,Spring Boot动态地连接bean和设置并将它们应用于您的应用程序上下文。

从Spring Initializr开始

对于所有Spring应用程序,您应该从Spring Initializr开始。 Initializr提供了一种快速的方法来提取应用程序所需的所有依赖项,并为您完成了许多设置。 该示例仅需要Spring Web依赖项。

您可以直接从Spring Initializr获取具有必要依赖项的Maven构建文件。 以下清单显示了在选择Maven时创建的pom.xml文件:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.4.2

com.example

spring-boot

0.0.1-SNAPSHOT

spring-boot

Demo project for Spring Boot

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

您可以直接从Spring Initializr获取具有必要依赖项的Gradle构建文件。 以下清单显示了在选择Gradle时创建的build.gradle文件:

plugins {

id 'org.springframework.boot' version '2.4.2'

id 'io.spring.dependency-management' version '1.0.11.RELEASE'

id 'java'

}

group = 'com.example'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = '1.8'

repositories {

mavenCentral()

}

dependencies {

implementation 'org.springframework.boot:spring-boot-starter-web'

testImplementation 'org.springframework.boot:spring-boot-starter-test'

}

test {

useJUnitPlatform()

}


创建一个简单的Web应用程序

现在,您可以为一个简单的Web应用程序创建一个Web控制器,如以下清单所示(来自src / main / java / com / example / spring boot / Hello Controller.java):

package com.example.springboot;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.bind.annotation.RequestMapping;

@RestController

public class HelloController {

@RequestMapping("/")

public String index() {

return "Greetings from Spring Boot!";

}

}

该类被标记为@RestController,这意味着Spring MVC可以使用它来处理Web请求。 @RequestMapping将/映射到index()方法。 从浏览器调用或在命令行上使用curl时,该方法返回纯文本。 这是因为@RestController结合了@Controller和@ResponseBody这两个注释,它们导致Web请求返回数据而不是视图。

创建一个应用程序类

Spring Initializr为您创建一个简单的应用程序类。 但是,在这种情况下,它太简单了。 您需要修改应用程序类以匹配以下列表(来自src / main / java / com / example / springboot / Application.java):

@SpringBootApplication是一个方便注释,它添加了以下所有内容:

@Configuration:将类标记为应用程序上下文的Bean定义的源。

@EnableAutoConfiguration:告诉Spring Boot根据类路径设置,其他bean和各种属性设置开始添加bean。例如,如果spring-webmvc在类路径上,则此注释将应用程序标记为Web应用程序并激活关键行为,例如设置DispatcherServlet。

@ComponentScan:告诉Spring在com / example包中寻找其他组件,配置和服务,让它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法启动应用程序。您是否注意到没有一行XML?也没有web.xml文件。此Web应用程序是100%纯Java,因此您无需处理任何管道或基础结构。

还有一个标记为@Bean的CommandLineRunner方法,该方法在启动时运行。它检索由您的应用程序创建或由Spring Boot自动添加的所有bean。它对它们进行排序并打印出来。

运行应用程序

要运行该应用程序,请在终端窗口(完整)目录中运行以下命令:

./gradlew bootRun

如果使用Maven,请在终端窗口(完整)目录中运行以下命令:

./mvnw spring-boot:运行

您应该看到类似于以下内容的输出:

Let's inspect the beans provided by Spring Boot:

application

beanNameHandlerMapping

defaultServletHandlerMapping

dispatcherServlet

embeddedServletContainerCustomizerBeanPostProcessor

handlerExceptionResolver

helloController

httpRequestHandlerAdapter

messageSource

mvcContentNegotiationManager

mvcConversionService

mvcValidator

org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration

org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration

org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration

org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$DispatcherServletConfiguration

org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat

org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration

org.springframework.boot.context.embedded.properties.ServerProperties

org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor

org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor

org.springframework.context.annotation.internalAutowiredAnnotationProcessor

org.springframework.context.annotation.internalCommonAnnotationProcessor

org.springframework.context.annotation.internalConfigurationAnnotationProcessor

org.springframework.context.annotation.internalRequiredAnnotationProcessor

org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration

propertySourcesBinder

propertySourcesPlaceholderConfigurer

requestMappingHandlerAdapter

requestMappingHandlerMapping

resourceHandlerMapping

simpleControllerHandlerAdapter

tomcatEmbeddedServletContainerFactory

viewControllerHandlerMapping

您可以清楚地看到org.springframework.boot.autoconfigure bean。 还有一个tomcatEmbeddedServletContainerFactory。

现在,通过运行以下命令(及其输出显示),使用curl(在单独的终端窗口中)运行该服务:

curl localhost:8080

Greetings from Spring Boot!


添加单元测试

您将要为添加的端点添加一个测试,Spring Test为此提供了一些机制。

如果使用Gradle,请将以下依赖项添加到build.gradle文件中:

testImplementation('org.springframework.boot:spring-boot-starter-test')

如果使用Maven,请将以下内容添加到pom.xml文件中:

org.springframework.boot

spring-boot-starter-test

test

现在编写一个简单的单元测试,以模拟通过端点的servlet请求和响应,如以下清单(来自src / test / java / com / example / springboot / HelloControllerTest.java)所示:

package com.example.springboot;

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;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.http.MediaType;

import org.springframework.test.web.servlet.MockMvc;

import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

@SpringBootTest

@AutoConfigureMockMvc

public class HelloControllerTest {

@Autowired

private MockMvc mvc;

@Test

public void getHello() throws Exception {

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

.andExpect(status().isOk())

.andExpect(content().string(equalTo("Greetings from Spring Boot!")));

}

}

MockMvc来自Spring Test,它使您可以通过一组方便的构建器类将HTTP请求发送到DispatcherServlet并对结果进行断言。 请注意使用@AutoConfigureMockMvc和@SpringBootTest来注入MockMvc实例。 使用@SpringBootTest之后,我们要求创建整个应用程序上下文。 一种替代方法是要求Spring Boot通过使用@WebMvcTest仅创建上下文的Web层。 无论哪种情况,Spring Boot都会自动尝试查找应用程序的主应用程序类,但是如果您要构建其他内容,则可以覆盖它或缩小它的范围。

除了模拟HTTP请求周期外,您还可以使用Spring Boot编写简单的全栈集成测试。 例如,除了(或同时)前面显示的模拟测试,我们可以创建以下测试(来自src / test / java / com / example / springboot / HelloControllerIT.java):

由于webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,嵌入式服务器从一个随机端口启动,并且在运行时使用@LocalServerPort发现了实际端口。

添加生产级服务

如果要为您的企业构建网站,则可能需要添加一些管理服务。 Spring Boot的执行器模块提供了多种此类服务(例如运行状况,审计,Bean等)。

如果使用Gradle,请将以下依赖项添加到build.gradle文件中:

implementation 'org.springframework.boot:spring-boot-starter-actuator'

如果您使用Maven,请将以下依赖项添加到pom.xml文件中:

org.springframework.boot

spring-boot-starter-actuator

然后重新启动应用程序。 如果使用Gradle,请在终端窗口(完整目录中)中运行以下命令:

./gradlew bootRun

如果使用Maven,请在终端窗口(完整目录中)中运行以下命令:

./mvnw spring-boot:run

您应该看到已经向应用程序添加了一组新的RESTful端点。 这些是Spring Boot提供的管理服务。 以下清单显示了典型的输出:

management.endpoint.configprops-org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointProperties

management.endpoint.env-org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointProperties

management.endpoint.health-org.springframework.boot.actuate.autoconfigure.health.HealthEndpointProperties

management.endpoint.logfile-org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointProperties

management.endpoints.jmx-org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointProperties

management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties

management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties

management.health.status-org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties

management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties

management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties

management.metrics.export.simple-org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleProperties

management.server-org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties

management.trace.http-org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceProperties

执行器有以下特点:

执行器/健康

执行器/信息

执行器

还有一个/ actuator / shutdown端点,但是默认情况下,它仅通过JMX可见。 要将其启用为HTTP端点,请在您的application.properties文件中添加management.endpoint.shutdown.enabled = true,并使用management.endpoints.web.exposure.include = health,info,shutdown进行公开。 但是,您可能不应该为公共可用的应用程序启用关闭端点。

您可以通过运行以下命令来检查应用程序的运行状况:

$ curl localhost:8080/actuator/health

{"status":"UP"}

您还可以尝试通过curl调用shutdown,以查看未向application.properties添加必要的行(如前一注释所示)时会发生的情况:

$ curl -X POST localhost:8080/actuator/shutdown

{"timestamp":1401820343710,"error":"Not Found","status":404,"message":"","path":"/actuator/shutdown"}

因为我们未启用它,所以请求的端点不可用(因为该端点不存在)。

有关每个REST端点以及如何使用application.properties文件(在src / main / resources中)调整其设置的更多详细信息,请参阅有关端点的文档。

查看Spring Boot的入门者

您已经看到了Spring Boot的一些“启动器”。您可以在源代码中看到它们。

JAR支持和Groovy支持

最后一个示例显示了Spring Boot如何让您连接可能不知道自己需要的bean。它还显示了如何打开便捷的管理服务。

但是,Spring Boot的作用还不止这些。借助Spring Boot的加载程序模块,它不仅支持传统的WAR文件部署,还使您可以组合可执行的JAR。各种指南通过spring-boot-gradle-plugin和spring-boot-maven-plugin展示了这种双重支持。

最重要的是,Spring Boot还具有Groovy支持,使您仅用一个文件就可以构建Spring MVC Web应用程序。

创建一个名为app.groovy的新文件,并将以下代码放入其中:

@RestController

class ThisWillActuallyRun {

    @RequestMapping("/")

    String home() {

        return "Hello, World!"

    }

}

文件在哪里都没有关系。 您甚至可以在一个推文中包含一个很小的应用程序!

接下来,安装Spring Boot的CLI。

通过运行以下命令来运行Groovy应用程序:

$ spring run app.groovy

关闭前一个应用程序,以避免端口冲突。

在另一个终端窗口中,运行以下curl命令(及其输出显示):

$ curl localhost:8080

Hello, World!

Spring Boot通过在代码中动态添加关键注释并使用Groovy Grape来拉低使应用程序运行所需的库来实现此目的。

概括

恭喜你! 您使用Spring Boot构建了一个简单的Web应用程序,并了解了它如何加快您的开发速度。 您还打开了一些便捷的生产服务。 这只是Spring Boot可以做的一小部分。 有关更多信息,请参见Spring Boot的在线文档。

也可以看看

以下指南也可能会有所帮助:

保护Web应用程序

使用Spring MVC服务Web内容

是否要编写新指南或为现有指南做出贡献? 查看我们的贡献准则。

所有指南均以代码的ASLv2许可证和写作的Attribution,NoDerivatives创用CC许可证发布。

你可能感兴趣的:(官网-使用Spring Boot构建应用程序)