本指南提供了有关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许可证发布。