spring.io网站包含了许多使用Spring Boot的“入门指南”,你可以访问start.spring.io并从依赖关系搜索器中选择”Web” starter来快速构建你的第一个项目,也可以按照下面所描述的步骤来构建你的项目。这将自动生成一个新的项目结构,以便你可以立即开始编码。查看Spring Initializr documentation可以了解更多细节。
在开始之前,打开终端检查你是否安装了有效的Java和Maven版本。
1. 创建POM
首先创建一个Maven pom.xml文件。pom.xml是用于构建项目的配方。打开文本编辑器并添加以下内容:
<?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 http://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>1.5.4.RELEASE
</version>
</parent>
<!-- 此处添加其它行... -->
</project>
上面的清单应该可以为你提供有效的构建。你可以通过运行mvn package来测试它(你可以暂时忽略“jar will be empty - no content was marked for inclusion!”警告)。此时,你可以将项目导入IDE(大多数现代Java IDE都包含了对Maven的内置支持)。为简单起见,我们将继续使用纯文本编辑器演示此示例。
2. 添加classpath依赖
Spring Boot提供了多个“Starters”,可以方便地将jar添加到你的classpath下。我们的示例应用在POM的parent部分使用了spring-boot-starter-parent。spring-boot-starter-parent是一个提供了有效的Maven默认配置值的特殊starter。它还提供了 dependency-management功能,以便你可以省去dependencies中的version标签。
其他的“Starters”提供了你在开发特定应用时可能需要用到的依赖。由于我们正在开发一个web应用,所以我们需要添加一个spring-boot-starter-web依赖 。但在此之前,我们可以通过运行mvn dependency:tree命令来查看我们当前拥有的依赖。
mvn dependency:tree命令以树形的形式打印项目的依赖。你可以看到spring-boot-starter-parent本身不提供依赖。为了添加必需的依赖,编辑你的pom.xml并在parent部分下面添加spring-boot-starter-web依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果你再次运行mvn dependency:tree命令,你会看到增加了许多附加的依赖,包括了Tomcat web服务器和Spring Boot本身的依赖。
3. 编码
要完成我们的应用,我们需要创建一个单独的Java文件。默认情况下,Maven将从src/main/java目录下编译源代码,因此你需要创建该目录结构,之后在该目录下添加一个包含了以下代码的名为Example.java的文件:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception{
SpringApplication.run(Example.class, args);
}
}
虽然这里没有多少代码,但仍然做了很多事情。让我们在接下来的几个小节中看看代码中比较重要的部分。
3.1 @RestController和@RequestMapping注解
Example类中的第一个注解是@RestController。它被称作stereotype注解。它为人们阅读代码提供了一些提示,对于Spring而言,这个类具有特定的作用。在这种情况下,我们的类是一个web的@Controller,因此Spring在处理传入的web请求时会考虑它。
@RequestMapping注解提供了“routing(路由)”信息。它告诉Spring,任何具有路径为“/”的HTTP请求都应映射到home方法中。@RestController注解告诉Spring将渲染生成的结果字符串直接返回给调用者。
@RestController和@RequestMapping是Spring MVC注解(它们不是Spring Boot特有的)。有关更多详细信息,请参阅Spring参考文档中的MVC section。
3.2 @EnableAutoConfiguration注解
第二个类级别注解是@EnableAutoConfiguration。此注解告诉Spring Boot根据你添加的jar包依赖来“猜测”你将如何配置Spring,由于spring-boot-starter-web添加了Tomcat和Spring MVC,auto-configuration(自动配置) 将假定你正在开发web应用并相应的设置了Spring。
Auto-configuration旨在与“Starter”配合使用,但这两个概念并不是直接相关的。你可以自由选择starters之外的jar依赖,Spring Boot仍然会自动配置你的应用程序。
3.3 “main”方法
我们应用的最后一部分是 main 方法。这只是一个遵循Java惯例的应用程序入口点的标准方法。我们的main方法通过调用 run 来委托Spring Boot的 SpringApplication类,SpringApplication类将引导我们的应用,启动Spring,然后启动自动配置的Tomcat web服务器。我们需要将Example.class作为一个参数传递给 run 方法来告知 SpringApplication它是Spring的主要组件。同时还传递 args 数组以暴露任何命令行参数。
4. 运行示例
做到这个点上,我们的应用应该是可以工作了。由于我们使用了 spring-boot-starter-parent POM,所以我们有一个有效的 运行方式来启动应用程序。在根目录下输入 mvn spring-boot:run以启动应用。
如果你用浏览器打开了localhost:8080,你应该会看到以下输出:Hello World!
然后可以按ctrl-c来正常退出程序。
5. 创建可执行jar
我们可以通过创建一个完全自包含的可以在生产环境中运行的可执行jar文件来完成我们的示例。可执行jar文件(有时被称为“fat jars”)是包含编译后的类以及代码运行时所需要相关的jar依赖的归档文件。
Java不提供任何标准方式来加载嵌套的jar文件(例如本身包含在jar中的jar文件)。如果你正在寻找一种分发自包含的应用的解决方案,这可能是个问题。
为了解决此问题,许多开发人员使用“uber”jars。一个uber jar简单地将所有类从所有jar包放到一个单独的归档中。这种方法的问题在于,很难看出你的应用程序实际上使用到哪些库。如果在多个jar中使用了相同的文件名(但内容不同),也可能会产生问题。
Spring Boot采用了不同方法来使你可以直接对jar进行嵌套。
要创建可执行jar,我们需要将 spring-boot-maven-plugin 添加到我们的pom.xml文件中。在 dependencies 下方插入以下行:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent的POM中包含了 配置来绑定 repackage 目标。如果你没有使用parent POM,则需要自己声明此配置。有关详细的信息,请参阅plugin documentation 。
保存你的 pom.xml 并在命令行中运行 mvn package命令。
如果你浏览 target 目录,你应该会看到myproject-0.0.1-SNAPSHOT.jar文件。该文件的大小大约为10MB。如果你想要“偷看”里面的内容,你可以使用如下所示的jar tvf命令:jar tvf target/myproject-0.0.1-SNAPSHOT.jar。
你应该还会在 target 目录中看到一个名为 myproject-0.0.1-SNAPSHOT.jar.original 的较小的文件。这是Maven在由Spring Boot重新打包之前所创建的原始jar文件。
要运行该应用,使用如下所示的 java -jar 命令:java -jar target/myproject-0.0.1-SNAPSHOT.jar。
跟之前一样, 要正常退出应用,请按 ctrl-c。