1. Introducing Spring Boot
spring boot使您可以轻松地创建可以运行的独立的、生产级的基于spring的应用程序。我们对spring平台和第三方库有一个自以为是的看法,这样您就可以从最少的麻烦开始了。大多数Spring启动应用程序只需要很少的Spring配置。
您可以使用SpringBoot创建Java应用程序,这些应用程序可以通过使用Java-JAR或更传统的WAR部署启动。我们还提供了一个运行“spring脚本”的命令行工具。
我们的主要目标是:
为所有spring开发提供一个更快、更容易获得的入门体验。
开箱即用,但要在需求开始偏离默认值时迅速离开。
提供一系列对大型项目类通用的非功能性特性(如嵌入式服务器、安全性、度量、运行状况检查和外部化配置)。
完全没有代码生成,也不需要xml配置
2. System Requirements
spring boot 2.2.0.release需要java 8,并且兼容java 13(包括java13)。spring framework 5.2.0.release或更高版本也是必需的。
为以下生成工具提供显式生成支持:
Build Tool | Version |
---|---|
Maven | 3.3+ |
Gradle | 5.x (4.10 is also supported but in a deprecated form) |
Spring Boot支持以下嵌入式Servlet容器:
Name | Servlet Version |
---|---|
Tomcat 9.0 | 4.0 |
Jetty 9.4 | 3.1 |
Undertow 2.0 | 4.0 |
您还可以将spring引导应用程序部署到任何与servlet 3.1+兼容的容器中。
3. Installing Spring Boot
spring boot可以与“经典”java开发工具一起使用,也可以作为命令行工具安装。不管怎样,您都需要JavaSDKv1.8或更高版本。开始之前,应使用以下命令检查当前的Java安装:
$ java -version
3.1Maven Installation
Spring Boot与ApacheMaven 3.3或更高版本兼容。如果尚未安装maven,可以按照maven.apache.org上的说明进行操作。
Spring引导依赖项使用org.springframework.boot groupid。通常,你的maven pom文件继承自spring-boot-starter-parent,并向一个或多个“starters”声明依赖关系。spring boot还提供了一个可选的maven插件来创建可执行jar。
下面是一个例子
<?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.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.3. Upgrading from an Earlier Version of Spring Boot
如果要从1.x版本的Spring Boot进行升级,请查看Project Wiki上提供详细升级说明的“迁移指南”。还可以查看“发行说明”以获取每个发行版的“新的和值得注意的”功能列表。
升级到新功能版本时,某些属性可能已重命名或删除。spring boot提供了一种在启动时分析应用程序环境和打印诊断信息的方法,但也可以在运行时为您临时迁移属性。要启用该功能,请将以下依赖项添加到项目中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
4. Developing Your First Spring Boot Application
spring.io网站包含许多使用spring boot的“入门”指南。如果你需要解决一个特定的问题,先检查一下。
您可以通过转到start.spring.io并从依赖项搜索器中选择“web”启动程序来简化以下步骤。这样做会生成一个新的项目结构,以便您可以立即开始编码。有关更多详细信息,请查看spring初始化https://docs.spring.io/initializr/docs/current/reference/html//#user-guide文档。
4.1. Creating the POM
<?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.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
4.2. Adding Classpath Dependencies
spring boot提供了许多“Starters”,允许您将jar添加到类路径中。我们的烟雾测试应用程序使用pom父部分中的spring-boot-starter-parent部分。spring-boot-starter-parent程序是一个特殊的启动程序,它提供了有用的maven默认值。它还提供了一个依赖项管理部分,以便您可以省略依赖项的版本标记。
其他“Starters”提供在开发特定类型的应用程序时可能需要的依赖项。因为我们正在开发一个web应用程序,所以我们添加了一个spring-boot-starter-web依赖项。在此之前,我们可以通过运行以下命令查看当前的情况:
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree命令打印项目依赖项的树表示。您可以看到spring boot starter父级本身不提供依赖项。
4.3. Writing the Code
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Example.class, args);
}
}
4.3.1. The @RestController and @RequestMapping Annotations
示例类的第一个注解是@restcontroller。这被称为原型注解。它为阅读代码的人和spring提供了类扮演特定角色的提示。在本例中,我们的类是web@controller,因此spring在处理传入的web请求时会考虑它。
@RequestMapping 注释提供“路由”信息。它告诉spring任何带有/path的http请求都应该映射到home方法。@restcontroller注释告诉spring将结果字符串直接呈现回调用方。
@RestController 和@RequestMapping 注解是spring mvc注解(它们不是spring boot特有的)。有关更多详细信息,请参见spring参考文档中的mvc部分
4.3.2. The @EnableAutoConfiguration Annotation
这个注释告诉spring boot根据您添加的jar依赖项“猜测”您想要如何配置spring。由于spring-boot-starter-web添加了tomcat和spring mvc,因此自动配置假定您正在开发一个web应用程序并相应地设置spring。
4.3.3. The “main” Method
我们的main方法通过调用run委托给spring boot的springapplication类。spring application引导我们的应用程序,启动spring,然后启动自动配置的tomcat web服务器。我们需要将example.class作为参数传递给run方法,以告诉springapplication哪个是主spring组件。args数组也被传递以公开任何命令行参数。
4.4. Running the Example
此时,您的应用程序应该可以工作。由于使用了spring boot starter父pom,因此有一个有用的运行目标,可以用来启动应用程序。键入mvn spring boot:从根项目目录运行以启动应用程序。您将看到类似于以下内容的输出
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.0.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
如果你打开浏览器localhost:8080你就会看到
Hello World!
4.5. Creating an Executable Jar
我们通过创建一个完全独立的可执行jar文件来完成我们的示例,该文件可以在生产环境中运行。可执行jar是包含编译类以及代码需要运行的所有jar依赖项的归档文件。
要创建一个可执行的jar,我们需要将spring boot maven插件添加到pom.xml中。为此,请在“依赖项”部分下面插入以下行
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent pom包含绑定重新打包目标的<executions>配置。如果不使用父pom,则需要自己声明此配置。有关详细信息,请参阅插件文档https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/maven-plugin//usage.html。
$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] .... .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.2.0.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
如果您在target
目录中查找,应该会看到myproject-0.0.1-snapshot.jar。文件大小应该在10 MB左右。如果你想偷看里面,可以使用jar tvf,如下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
您还应该在目标目录中看到一个更小的文件myproject-0.0.1-snapshot.jar.original。这是maven在spring boot重新打包之前创建的原始jar文件。
要运行该应用程序,请使用java-jar命令,如下所示:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar