在本文中,主要内容包括什么是Spring Boot,优点,主要功能以及使用Spring Boot创建一个简单的应用程序。
Spring Boot是什么?
Spring Boot是对Spring Framework的增强和扩展,它极大的消除了使用Spring Framework时所需的大量样板代码的配置,与此同时,Spring Boot提供的很多Starter能让开发人员更快的完成系统的开发。
Spring Boot主要的优势
相比于Spring Framework,使用Spring Boot能为开发者带来以下优势:
- 为使用Spring Framework带来更好的体验
- 开箱即用,Spring Boot提供了大量的默认配置,根据需求,开发者可以很轻松覆盖原有配置
- 提供了一些列优秀的功能插件,如嵌入式服务器,安全检查,系统指标,运行状况检查以及外部化配置
- 推荐基于Java代码的配置方式,可以很少或完全不使用XML配置应用
Spring Boot的核心功能
与Spring Framework相比较,下面列举Spring Boot的一些核心功能,Spring Boot的功能不局限于下面所列举:
- Spring Boot Starters
- Spring Boot AutoConfiguration
- 优雅的配置管理
- Spring Boot Actuator
- 易于使用的嵌入式Servlet容器
接下来,将详细说明Spring Boot的核心功能。
1. Spring Boot Starters
Spring Boot提供了许多开箱即用的Starter模块,例如Spring MVC,JPA,MySQL,Spring Security,Solor,Hibernate,Freemarker等等。这些Starter已经预先配置好了最常用的依赖库,因此你不必像使用Spring那样去考虑各依赖库之间的版本兼容问题。
如果你希望在项目中使用Hibernate框架且基于JPA实现,你只需要在pom文件中加入spring-boot-starter-data-jpa即可,Spring Boot会自动加载所需要的依赖库。
2. Spring Boot AutoConfiguration
Spring Boot另一个革命性的功能是自动配置,有了自动配置功能,你可以摒弃之前使用XML手动配置应用的方式,通过几行代码,即可完成应用系统复杂的配置工作。
Spring Boot会自动根据某些特定的条件自动完成Bean的注册工作,下面是触发Spring Boot完成自动注入的一些条件:
- 当类路径下存在特定的且可用的类时
- 当Spring Bean存在/不存在时
- 当存在特定的系统属性时
- 当缺少配置文件时
例如,当你的项目中存在spring-mvc的依赖库时,Spring Boot会猜测你将构建一个基于Spring MVC的Web应用程序,在你未编写任何代码前,Spring Boot会尝试注册一个默认的DispatcherServlet。如果你的类路径下包含得有任何嵌入式数据库驱动程序(H2或HSQL),在未显示配置DataSource前,Spring Boot会自动配置一个DataSource得Bean。
3. 优雅的配置管理
Spring Boot支持使用@PropertySource注解完成外部化可配置属性。使用Spring Boot的配置键值对,可以将键值对与Bean属性进行绑定,另外,Spring Boot还提供为不同环境提供针对性的配置文件,你只需要简单的几行代码即可完成配置管理。
4. Spring Boot Actuator
很多时候,我们都需要去收集在生产环境中运行的应用程序的诸多性能参数,而Spring Boot Actuator已经为我们提供了类似的许多功能,我们无需编写大量的代码,只需简单的一些配置,便可监控我们的应用程序,收集指标数据,了解URL请求状况等。例如,我们可以通过引入Spring Boot Actuator而获得如下的一些便利:
- 获取应用程序中所有Spring Bean的详细信息
- 获取应用程序运行状况信息
- 获取HTTP跟踪信息
- 获取应用程序日志信息
- 获取应用程序中的计划任务信息
- 获取应用程序中的路径映射列表信息(Web应用)
5. 易于使用的嵌入式Servlet容器
以往,我们在构建Web应用程序时,需要手动创建WAR类型的程序包,然后将其部署到外部服务器(例如Tomcat)上才可以运行应用程序,现在,当你使用Spring Boot时,你可以很方便的创建JAR类型的程序包,且该类型的程序包已经内嵌了Servlet容器,你可以在不依赖于外部服务器的情况下运行Web应用程序。
6. 系统要求
Spring Boot 2.2.2.RELEASE最低要求Java 8,同时也支持Java 13。此外,还需要Spring Framework 5.2.2.RELEASE或更高的版本。
6.1 构建工具本版
在开始使用Spring Boot 2.2.2之前,你应该先检查本地的构建工具是否满足以下的配置要求:
6.2 Servlet容器
Spring Boot 2.2.2支持以下的嵌入式Servlet容器:
除此之外,你还可以将Spring Boot应用程序打包为WAR包,部署到支持Servlet 3.1及以上版本的外部容器中。
7. 为什么使用Spring Boot?
与直接使用Spring相比,使用Spring Boot你将如下的一些优势(不局限于列举范围):
- 开发基于Spring的应用变得更简单容易
- 开箱即用的特性减少的开发时间,提高了开发效率
- Spring Boot避免了大量的样板代码和XML配置
- 能够很轻松的与其他Spring生态系统集成(例如Spring JDBC,Spring ORM,Spring Data,Spring Security)
- Spring Boot的自动注入能够帮助开发人员减少工作量
- Spring Boot提供了嵌入式的Servlet容器,方便开发人员对应用进行测试
8.编写第一个Spring Boot应用程序
本小节将基于Java 8 和Maven 3.0+构建一个简单的Spring Boot Web应用程序,通过浏览器访问http://localhost:8080 ,在页面中输出”Hello Spring Boot“语句。
在开始编写应用程序之前,先检查本地环境是否满足开发要求。首先,打开操作系统终端,检查Java的版本信息,以Microsoft Windows 10 为例:
然后,在终端输入mvn -v检查Maven的版本信息
8.1 创建POM
首先,我们需要创建一个工程目录spring-boot-firstapp,然后在其目录下创建一个Maven pom.xml文件,该文件用于管理项目的依赖。然后,使用你喜欢的编辑器打开该文件并写入如下的内容:
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASEcom.ramostear spring-boot-firstapp 0.0.1-SNAPSHOTspring-boot-firstappDemo project for Spring Boot1.8org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-maven-plugin
最后,打开你的操作系统终端,导航到spring-boot-firstapp目录下,执行mvn package命令进行测试,执行此命令后,spring-boot-firstapp目录下会生成多个文件夹:
spring-boot-firstapp├─src ├─main │ ├─java │ │ └─com │ │ └─ramostear │ │ └─springbootfirstapp │ │ SpringBootFirstappApplication.java │ │ │ └─resources │ application.properties │ └─test └─java └─com └─ramostear └─springbootfirstapp └─SpringBootFirstappApplicationTests.java
8.2 添加Web依赖
由于我们要创建一个Web应用程序,因此需要向pom文件中加入相关的web依赖。现在我们使用spring boot构建web应用程序,只需在pom文件的dependencies节点中加入如下的依赖即可:
org.springframework.boot spring-boot-starter-web
在这里,你会发现我们并没有填写spring-boot-starter-web依赖库的版本号,该依赖库的版本将由spring-boot-starter-parent统一管理。
8.3 编写代码
现在,我们要创建一个Java文件,完成向浏览器页面输入”Hello Spring Boot“的功能。在src/main/java/com/ramostear/springbootfirstapp目录下创建一个名为HelloSpringBoot.java的文件,并用你喜欢的文本编辑器打开文件并写入以下代码:
package com.ramostear.springbootfirstapp;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @ClassName HelloSpringBoot * @Description TODO * @Author ramostear * @Date 2020/1/7 0007 15:19 * @Version 1.0 **/@RestControllerpublic class HelloSpringBoot { @GetMapping("/") public String sayHello(){ return "Hello Spring Boot"; }}
RestController注解会将字符串”Hello Spring Boot“直接返回到页面,而不是返回一个视图;GetMapping时RequestMapping的一种简写。
8.4 运行示例
由于使用了spring-boot-starter-parent依赖,因此可以在终端使用mvn spring-boot:run命令来运行本次示例,命令执行成功后,你可以在控制台查看到以下的输出:
mvn spring-boot:run. ____ _ __ _ _ / / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | / ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.2.RELEASE)...2020-01-07 15:26:04.868 INFO 3100 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''...
现在,你可以打开浏览器并输入http://localhost:8080,你可以在页面上观察到如下的信息: