本指南提供了如何弹簧启动帮助您加速应用程序开发。随着您阅读更多 Spring 入门指南,您将看到更多 Spring Boot 的用例。本指南旨在让您快速体验Spring Boot。如果您想创建自己的基于 Spring 引导的项目,请访问Spring Initializr,填写您的项目详细信息,选择您的选项,然后将捆绑的项目下载为 zip 文件。
您将构建什么
您将使用 Spring Boot 构建一个简单的 Web 应用程序,并向其添加一些有用的服务。
你需要什么
- 约15分钟
- 最喜欢的文本编辑器或 IDE
- JDK 1.8或以后
- 格拉德尔 4+或梅文 3.2+
- 您也可以将代码直接导入到 IDE 中:
- 弹簧工具套件 (STS)
- 智能理念
- VSCode
如何完成本指南
像大多数春天一样入门指南,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。
要从头开始,请继续从 Spring 初始化开始.
要跳过基础知识,请执行以下操作:
- 下载并解压缩本指南的源存储库,或使用吉特: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为您处理这个问题。
- 百里香叶在类路径上吗?如果是这样,则必须始终将一些 bean 添加到应用程序上下文中。Spring Boot 为您添加了它们。
这些只是 Spring Boot 提供的自动配置的几个示例。同时,Spring Boot不会妨碍您。例如,如果 Thymeleaf 在您的路径上,Spring Boot 会自动将 a 添加到您的应用程序上下文中。但是,如果您使用自己的设置定义自己的设置,Spring Boot 不会添加一个。这使您无需付出任何努力即可控制。SpringTemplateEngineSpringTemplateEngine
Spring Boot 不会生成代码或编辑您的文件。相反,当您启动应用程序时,Spring Boot 会动态连接 bean 和设置,并将它们应用于您的应用程序上下文。
从 Spring 初始化开始
你可以使用这个预初始化项目,然后单击生成以下载 ZIP 文件。此项目配置为适合本教程中的示例。
手动初始化项目:
如果您的 IDE 集成了 Spring Initializr,则可以从 IDE 完成此过程。
您也可以从 Github 分叉项目,然后在 IDE 或其他编辑器中打开它。
创建简单的 Web 应用程序
现在,您可以为简单的 Web 应用程序创建 Web 控制器,如以下列表(来自)所示:src/main/java/com/example/springboot/HelloController.java
package com.example.springboot;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @GetMapping("/") public String index() { return "Greetings from Spring Boot!"; }}该类被标记为 ,这意味着它已准备好被 Spring MVC 用于处理 Web 请求。 映射到方法。从浏览器调用或在命令行上使用 curl 调用时,该方法返回纯文本。这是因为将 和 两个注释组合在一起,导致 Web 请求返回数据而不是视图。@RestController@GetMapping/index()@RestController@Controller@ResponseBody
创建应用程序类
Spring 初始化器为您创建一个简单的应用程序类。但是,在这种情况下,它太简单了。您需要修改应用程序类以匹配以下清单(来自):src/main/java/com/example/springboot/Application.java
package com.example.springboot;import java.util.Arrays;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Bean;@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public CommandLineRunner commandLineRunner(ApplicationContext ctx) { return args -> { System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } }; }}@SpringBootApplication是一个方便的注释,它添加了以下所有内容:
- @Configuration:将类标记为应用程序上下文的 Bean 定义源。
- @EnableAutoConfiguration:告诉 Spring 引导根据类路径设置、其他 bean 和各种属性设置开始添加 bean。例如,如果 在类路径上,则此注释会将应用程序标记为 Web 应用程序并激活关键行为,例如设置 .spring-webmvcDispatcherServlet
- @ComponentScan:告诉 Spring 在包中查找其他组件、配置和服务,让它找到控制器。com/example
该方法使用 Spring Boot 的方法启动应用程序。您是否注意到没有一行 XML?也没有文件。此 Web 应用程序是 100% 纯 Java,您无需处理配置任何管道或基础结构。main()SpringApplication.run()web.xml
还有一个标记为 的方法,该方法在启动时运行。它检索由您的应用程序创建或由 Spring Boot 自动添加的所有 bean。它对它们进行排序并打印出来。CommandLineRunner@Bean
运行应用程序
要运行应用程序,请在终端窗口(在 )目录中运行以下命令:complete
./gradlew bootRun如果使用 Maven,请在终端窗口(在 ) 目录中运行以下命令:complete
./mvnw spring-boot:run应会看到类似于以下内容的输出:
Let's inspect the beans provided by Spring Boot:applicationbeanNameHandlerMappingdefaultServletHandlerMappingdispatcherServletembeddedServletContainerCustomizerBeanPostProcessorhandlerExceptionResolverhelloControllerhttpRequestHandlerAdaptermessageSourcemvcContentNegotiationManagermvcConversionServicemvcValidatororg.springframework.boot.autoconfigure.MessageSourceAutoConfigurationorg.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfigurationorg.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfigurationorg.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$DispatcherServletConfigurationorg.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcatorg.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfigurationorg.springframework.boot.context.embedded.properties.ServerPropertiesorg.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessororg.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessororg.springframework.context.annotation.internalAutowiredAnnotationProcessororg.springframework.context.annotation.internalCommonAnnotationProcessororg.springframework.context.annotation.internalConfigurationAnnotationProcessororg.springframework.context.annotation.internalRequiredAnnotationProcessororg.springframework.web.servlet.config.annotation.DelegatingWebMvcConfigurationpropertySourcesBinderpropertySourcesPlaceholderConfigurerrequestMappingHandlerAdapterrequestMappingHandlerMappingresourceHandlerMappingsimpleControllerHandlerAdaptertomcatEmbeddedServletContainerFactoryviewControllerHandlerMapping你可以清楚地看到豆子。还有一个.org.springframework.boot.autoconfiguretomcatEmbeddedServletContainerFactory
现在使用 curl 运行服务(在单独的终端窗口中),通过运行以下命令(与其输出一起显示):
$ curl localhost:8080Greetings from Spring Boot!添加单元测试
您需要为添加的端点添加测试,Spring Test为此提供了一些机制。
如果您使用 Gradle,请将以下依赖项添加到您的文件中:build.gradle
testImplementation('org.springframework.boot:spring-boot-starter-test')如果使用 Maven,请将以下内容添加到文件中:pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency>现在编写一个简单的单元测试,通过端点模拟 servlet 请求和响应,如以下清单 (from ) 所示: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@AutoConfigureMockMvcpublic 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 请求发送到 并对结果做出断言。请注意使用 和 注入实例。使用 之后,我们要求创建整个应用程序上下文。另一种方法是要求 Spring 引导通过使用 仅创建上下文的 Web 层。无论哪种情况,Spring Boot 都会自动尝试查找应用程序的主应用程序类,但如果您想构建不同的东西,您可以覆盖它或缩小它的范围。DispatcherServlet@AutoConfigureMockMvc@SpringBootTestMockMvc@SpringBootTest@WebMvcTest
除了模拟HTTP请求周期,您还可以使用Spring Boot编写一个简单的全栈集成测试。例如,我们可以创建以下测试(来自):src/test/java/com/example/springboot/HelloControllerIT.java
package com.example.springboot;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.boot.test.web.client.TestRestTemplate;import org.springframework.http.ResponseEntity;import static org.assertj.core.api.Assertions.assertThat;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class HelloControllerIT { @Autowired private TestRestTemplate template; @Test public void getHello() throws Exception { ResponseEntity<String> response = template.getForEntity("/", String.class); assertThat(response.getBody()).isEqualTo("Greetings from Spring Boot!"); }}嵌入式服务器由于 而从随机端口启动,实际端口在 的基本 URL 中自动配置。webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORTTestRestTemplate
添加生产级服务
如果您正在为您的企业构建网站,您可能需要添加一些管理服务。Spring Boot 提供了几种这样的服务(例如健康、审计、豆类等),其执行器模块.
如果您使用 Gradle,请将以下依赖项添加到您的文件中:build.gradle
implementation 'org.springframework.boot:spring-boot-starter-actuator'如果使用 Maven,请将以下依赖项添加到文件中:pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>然后重新启动应用程序。如果您使用 Gradle,请在终端窗口(在目录中)中运行以下命令:complete
./gradlew bootRun如果使用 Maven,请在终端窗口(在目录中)中运行以下命令:complete
./mvnw spring-boot:run您应该看到一组新的 RESTful 端点已添加到应用程序中。这些是Spring Boot提供的管理服务。以下清单显示了典型输出:
management.endpoint.configprops-org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointPropertiesmanagement.endpoint.env-org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointPropertiesmanagement.endpoint.health-org.springframework.boot.actuate.autoconfigure.health.HealthEndpointPropertiesmanagement.endpoint.logfile-org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointPropertiesmanagement.endpoints.jmx-org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointPropertiesmanagement.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointPropertiesmanagement.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointPropertiesmanagement.health.diskspace-org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorPropertiesmanagement.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorPropertiesmanagement.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsPropertiesmanagement.metrics.export.simple-org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimplePropertiesmanagement.server-org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties执行器显示以下内容:
- 执行器/运行状况
- 驱动器
还有一个端点,但默认情况下,它只能通过 JMX 可见。自/actuator/shutdown将其启用为 HTTP 终结点,添加到您的文件中并使用 公开它。但是,您可能不应为公开可用的应用程序启用关闭终结点。management.endpoint.shutdown.enabled=trueapplication.propertiesmanagement.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.propertiessrc/main/resources有关终结点的文档.
查看弹簧靴的启动器
你已经看过一些Spring Boot的“首发”.你可以看到它们在源代码中.
JAR支持和时髦支持
最后一个示例显示了 Spring Boot 如何让您连接您可能不知道需要的 bean。它还展示了如何启用便捷的管理服务。
然而,Spring Boot的功能远不止于此。它不仅支持传统的WAR文件部署,而且还允许您将可执行的JAR放在一起,这要归功于Spring Boot的加载器模块。各种指南通过 和 演示了这种双重支持。spring-boot-gradle-pluginspring-boot-maven-plugin
最重要的是,Spring Boot 还支持Groovy,让你只需一个文件就可以构建Spring MVC Web应用程序。
创建一个名为的新文件,并将以下代码放入其中:app.groovy
@RestControllerclass ThisWillActuallyRun { @GetMapping("/") String home() { return "Hello, World!" }}文件在哪里并不重要。您甚至可以将这么小的应用程序安装在单条推文!
下一个安装 Spring Boot 的 CLI.
通过运行以下命令运行 Groovy 应用程序:
$ spring run app.groovy关闭以前的应用程序,以避免端口冲突。
在不同的终端窗口中,运行以下 curl 命令(与其输出一起显示):
$ curl localhost:8080Hello, World!Spring Boot 通过动态地向代码添加键注释并使用时髦的葡萄以下拉使应用运行所需的库。
总结
祝贺!您使用 Spring Boot 构建了一个简单的 Web 应用程序,并了解了它如何加快您的开发速度。您还打开了一些方便的制作服务。这只是 Spring Boot 可以做的一小部分。看Spring Boot 的在线文档以获取更多信息。