Part II. Getting Started
文档说明:
- 文档对应的版本为 2.1.0.M3
- 这不是文档的完整中文翻译,也有可能跟原文文字不一一对应,只是我阅读文档时候做的简单笔记
- 如果对应的章节没有任何中文,有可能是文档内容比较少,建议直接看原文,或者是我不感兴趣的部分
- 目录标题没有做翻译,首先标题一般一眼就能看懂什么意思,不做翻译还能保证原文意思,其次也方便对应到原文位置
8. Introducing Spring Boot
Spring Boot 让创建一个独立的、生产级别的、基于 Spring 的应用更加容易。
主要目标:
- 对于开发所有的 Spring 应用,提供一个非常快和非常容易理解的体验
- 能快速适应需求变化
- 提供大量非业务逻辑的通用功能,例如内嵌服务,安全,统计,健康检查和外部配置
- 绝对没有代码生成和XML配置 (原文:Absolutely no code generation and no requirement for XML configuration)
9. System Requirements
Spring Boot 2.1.0.M3 requires Java 8 or 9 and Spring Framework 5.1.0.RC3 or above.
其他版本的 Spring Boot 请参看对应版本的文档。
10. Installing Spring Boot
JDK 1.8 or Spring Boot CLI(Command Line Interface)
10.1 Installation Instructions for the Java Developer
可以把相关的 spring-boot-*.jar
拷贝到 classpath,但推荐使用构建工具。
10.1.1 Maven Installation
Spring Boot 依赖于 groupId 为 org.springframework.boot 的组件。
一般来说都是依赖 spring-boot-starter-parent 组件,也可以根据需要添加更多的 Starter。
spring-boot-starter-parent 并不总是适用,可以参考 “Using Spring Boot without the Parent 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 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>
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.M3</version>
</parent>
...
<project/>
10.1.2 Gradle Installation
依赖的东西是一样的,但是配置的语法有所不一样
10.2 Installing the Spring Boot CLI
Spring Boot CLI 是一个可以运行 Groovy 脚本来快速获取 Spring 应用的工具。
10.2.1 Manual Installation
10.2.2 Installation with SDKMAN!
SDKMAN:The Software Development Kit Manager
SDKMAN 用来管理多个版本的二进制 SDK,包括 Groovy 和 Spring Boot CLI。
从 sdkman.io 安装 SDKMAN,然后运行下面的脚本
$ sdk install springboot
$ spring --version
Spring Boot v2.1.0.M3
10.2.3 OSX Homebrew Installation
10.2.4 MacPorts Installation
10.2.5 Command-line Completion
10.2.6 Windows Scoop Installation
10.2.7 Quick-start Spring CLI Example
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
Then run it from a shell, and Open localhost:8080 in your favorite web browser to check the status
$ spring run app.groovy
10.3 Upgrading from an Earlier Version of Spring Boot
如果你想从一个比较旧的版本升级到比较新的版本,建议先查阅官方的 "migration guide" on the project wiki
Spring 提供了一个分析你的应用环境并打印出来建议的方法,还可以临时迁移属性。启用这个功能,需要添加如下配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
11. Developing Your First Spring Boot Application
开发你的第一个 Spring Boot 应用:通过一个简单的 HelloWorld Web 应用,介绍 Spring Boot 的关键特性。
建议先检查一下 java 和 maven 的版本:
# Java 要求 1.8 或者以上
java -version
# Maven 要求 3.2 或者以上
mvn -v
11.1 Create the POM
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 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>2.1.0.M3</version>
</parent>
<!-- Additional lines to be added here... -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>
上面的例子应该给到你一个可以工作的构建,可以通过 mvn package
来验证一下。你也可以在你熟悉的 IDE 添加这些内容。
11.2 Adding Classpath Dependencies
Spring Boot 提供了很多 Starters 来让你添加 jar 依赖到你的 classpath。文档上面的应用例子已经在 POM 文件里面的 parent 节点使用了 spring-boot-starter-parent。这个 spring-boot-starter-parent 是一个特殊的 starter,它提供了很多有用的 Maven 默认值。文档后面还提供了 "13.1 Dependency Management" 章节来介绍依赖管理,你可以在引入依赖的时候忽略版本号。
当开发特定类型的应用时,其他 "Starters" 会提供你需要的依赖。例如我们要开发一个 Web 应用,我们会添加 spring-boot-starter-web 的 starter 依赖。在这之前,我们可以查看现在项目都有哪些依赖
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree 命令会打印并以树形展示你项目的依赖,添加 spring-boot-starter-web 后,再执行该命令看下输出
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
11.3 Writing the Code
Maven 默认会从 src/main/java 目录编译代码。
src/main/Example.java
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) throws Exception {
SpringApplication.run(Example.class, args);
}
}
11.3.1 The @RestController and @RequestMapping Annotations
Example.java 的第一个注解 @RestController 是一个 stereotype 注解,它向阅读代码的人和 Spring 表明了它在充当 Web 应用的 @Controller 角色。
@RequestMapping 注解提供了“路由”信息。它告诉 Spring 所有带有 "/" 的 HTTP 请求都应该映射到 home 路径。@RestController 注解告诉 Spring 应该渲染结果内容并直接返回给调用方。
@RestController 和 @RequestMapping 都是 Spring MVC 的注解,并不是 Spring Boot 特有的注解。
11.3.2 The @EnableAutoConfiguration Annotation
@EnableAutoConfiguration 注解告诉 Spring Boot 根据你引入的 jar 依赖去“猜猜”你想怎样配置 Spring。spring-boot-starter-web 会自动引入 Tomcat 和 Spring MVC 组件,Spring Boot 的自动装配机制会认为你在开发一个 Web 应用。
Starters and Auto-configuration:Auto-configuration 是被设计来和 starter 协作的,但这两个概念并不是直接绑定的。你可以选择不以 starter 的方式来添加 jar 依赖,Spring Boot 的 Auto-configuration 仍然会做好其本分工作。
11.3.3 The "main" Method
例子代码的最后部分就是 main 方法。这个 main 方法只是 Java 代码运行的主入口。我们的 main 方法委托给了 Spring Boot's SpringApplication.run() 方法。SpringApplication 启动了应用。
11.4 Running the Example
到了这里,你的应用可以运行了。由于引用了 spring-boot-starter-parent,你会拥有启动应用的 run 脚本。在应用根目录下输入 mvn spring-boot:run 命令,然后在浏览器 输入 localhost:8080 验证服务是否启动成功。
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.M3)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
11.5 Creating an Executable Jar
Executable jar 是包含编译的 class 文件和所有 jar 依赖文件的 jar。
Java 没有提供关于加载嵌入 jar 文件(在 jar 文件里面包含另外的 jar 文件)的标准,命令行这种 jar 文件在不解压就在就可能会有问题。
为解决这个问题,很多开发者都通过共享 jar 的形式来处理。一个共享的 jar 包含了所有的类和 jar,并放进一个 jar 文件里面。这样你很难知道里面包含了多少库的依赖,而且还可能有文件重名的问题。
Spring Boot 采取了不同的做法,它让你直接内嵌 jar 文件。
为了创建一个可执行 jar 文件,需要在 POM 文件添加一个插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
通过 mvn package 命令打包:
$ 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.1.0.M3:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如同日志输出的内容显示,打包好的文件会输出到 target/myproject-0.0.1-SNAPSHOT.jar。
可以解压该 jar 文件看看里面的内容:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
运行该 jar 文件:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.M3)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
12. What to Read Next
- 其他的 getting started 文档
- 更多的案例
- 下一章节的内容: Part III, “Using Spring Boot”
网友评论