开始
如果你是一个Spring Boot或者Spring的新手,这章就是专门为你定制的!这里将回答“是什么”、“怎么用”、“为什么”,我们将从如何安装Spring Boot开始介绍。在这里将开发第一个基于Spring Boot应用,也将讨论一些核心原理。
8.Spring Boot介绍
Spring Boot使开发一个可用于生产环境的基于Spring的单体应用变得十分简单,你要做的就是“just run”,运行它而已。我们集成Spring和第三方库在一起,因此你可以从最近配置开始,而且大部分Spring Boot应用仅仅需要一点点的Spring配置。
你可以使用java -jar运行Spring Boot的应用,或者使用war包部署你的应用。我们也提供了一些命令行工具集来运行它。
我们的主要目标是:
- 为Spring开发者提供一个快速入门的经验
- 规约重于配置
- 减少重复性的开发,例如:内嵌容器、安全、监控、健康检查、配置等
- 不需要XML配置文件,使用注解替代它
9.系统需求
默认情况下,1.5.16.RELEASE版的Spring Boot需要Java7以上和Spring Framework4.3.19.RELEASE以上,你也可以使用Java6,但需要额外的配置,参考“配置Java6”
明确支持的构建工具
构建工具 | 版本号 |
---|---|
Maven | 3.2+ |
Gradle | [2.9,3.x] |
9.1 Servlet容器
支持的Servlet容器列表
名称 | Servlet版本 | Java版本 |
---|---|---|
Tomat8 | 3.1 | Java7+ |
Tomcat7 | 3.0 | Java6+ |
Jetty9.3 | 3.1 | Java8+ |
Jetty9.2 | 3.1 | Java7+ |
Jetty8 | 3.0 | Java6+ |
Undertow1.3 | 3.1 | Java7+ |
你可以将Spring Boot应用发布到任何支持Servlet3.0+的容器中
10.Spring Boot安装
Spring Boot可以使用经典的Java开发工具安装,或者使用命令行工具安装,但是你的Java必须是1.6以上版本,你可以使用以下命令测试下:
$ java -version
如果你是一个Java开发新手,或者你仅仅是想尝试下Spring Boot,你可以尝试下Spring Boot CLI,命令行工具,
10.1 安装介绍
你可以像安装标准java库的方式安装Spring Boot,就是把spring-boot-*.jar拷贝到你项目的calsspath下,Spring Boot不需要特定的集成开发工具,因此你可以使用IDE或者文本编辑器;因为Spring Boot和普通java程序比起来没有什么特别的,因此你可以像运行和调试普通程序一样运行和调试它。
尽管你可以拷贝Spring Boot jar文件到classpath下就可以使用了,但是我们强烈推荐你使用构建工具来操作,比如:Maven、Gradle
10.1.1 Maven安装
Spring Boot兼容Maven3.2以上版本,你可以跟着maven.apache.org来安装它
Spring Boot的依赖使用org.springframework.boot作为groupId,通常情况下你的pom文件继承自spring-boot-starter-parent
项目,声明依赖一个或多个"Starters".Spring Boot为创建可执行jars 提供了Maven 插件
下面是一个典型的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>
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.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>
通常情况下继承spring-boot-starter-parent
是一个最好的途径,但是也不是适应所有情况的,有时候你需要继承不同的父pom,或者你不想使用默认的设置,可以参考"不继承父POM使用Spring Boot"
10.1.2 Gradle安装
Spring Boot支持Gradle2(2.9 以上)和Gradle3.你可以跟着www.gradle.org来安装它
Spring Boot依赖声明使用org.springframework.boot为group,通常情况下声明一个或多个"Starters"
Spring Boot提供创建可执行jars的Gradle插件
下面是一个典型的build.gradle文件:
plugins {
id 'org.springframework.boot' version '1.5.16.RELEASE'
id 'java'
}
jar {
baseName = 'myproject'
version = '0.0.1-SNAPSHOT'
}
repositories {
jcenter()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
10.2 安装Spring Boot CLI
Spring Boot CLI是一个工具集,可以用来快速的构建Spring应用。可以运行Groovy脚本
开发Spring Boot应用不必须使用Spring Boot CLI,但是它会是一个加快开发的方式
10.2.1 手动安装
下载地址:
- spring-boot-cli-1.5.16.RELEASE-bin.zip
- spring-boot-cli-1.5.6.16.RELEASE-bin.tar.gz
下载后解压,跟着INSTALL.txt的步骤安装,简单来说是双击bin/
目录下的spring(spring.bat
windows版),或者使用java -jar
运行.jar文件
10.2.2 安装SDKMAN!
SDKMAN!(开发套件)可以被用来管理SDKs的版本,包括Groovy和Spring Boot CLI的版本
下载地址:
sdkman.io
配合Spring Boot安装:
$ sdk install springboot
$ spring --version
Spring Boot v1.5.16.RELEASE
快速查看构建的版本
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.5.16.RELEASE-bin/spring-1.5.16.RELEASE/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.5.16.RELEASE
这将安装spring的本地实例dev,它指向到目标构建路径下,每次重新构建Spring Boot,spring
都会更新到最新版本。
使用以下命令来确认:
$ sdk ls springboot
================================================================================
Available Springboot Versions
================================================================================
> + dev
* 1.5.16.RELEASE
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
10.2.3 OSX Homebrew 安装
如果你使用的是Mac,使用了Homebrew,你需要运行下面的命令来安装Spring Boot CLI:
$ brew tap pivotal/tap
$ brew install springboot
Homebrew 将会安装spring
到/usr/local/bin
目录下
10.2.4 MacPorts安装
如果你使用的是Mac,使用了MacPorts,运行以下命令安装Spring Boot CLI:
$ sudo port install spring-boot-cli
10.2.5 命令自动完成
Spring Boot CLI提供BASH和zsh的自动完成功能,你可以source
在任何的shell中,或者把它放到个人的安装目录下,在Debian系统的目录是/shell-completion/bash
$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
grab help jar run test version
10.2.6 Spring CLI示例:
下面的代码可以创建为app.groovy
,是一个web项目,用来测试你的安装是否正确
@RestController
class ThisWillActuallyRun{
@RequestMapping("/")
String home(){
"Hello World!"
}
}
运行它:
$ spring run app.groovy
一次运行因为需要编译,会比较慢,以后再访问就快了。。。
10.3 从老版本升级Spring Boot
如果你要从老版本升级,参考“project wiki”
11 开发第一个Spring Boot应用
让我们从“Hello World!”开始吧!它是一个web应用,我们使用Maven来构建,因为大部分的IDE都支持。
开始之前,需要检查java版本是否正确、Maven是否已安装
$ java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ mvn -v
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)
Maven home: /Users/user/tools/apache-maven-3.1.1
Java version: 1.7.0_51, vendor: Oracle Corporation
11.1 创建POM
我们要创建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.16.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
11.2 添加依赖
Spring Boot提供了许多"Starters",你可以根据需要来添加,我们仅仅简单的添加spring-boot-starter-parent
在parent
POM中。这个spring-boot-starter-parent
是一个默认的Maven配置,它也提供了dependency-management
片段来定制version
版本
因为是一个web应用,需要添加spring-boot-starter-web
依赖,不过在添加之前,我们来看下我都依赖些什么?
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
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等
11.3 编写代码
让我们创建一个java文件,Maven的java代码标准存放目录是src/main/java
,你需要先创建它,然后添加一个java文件Example.java,路径是: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);
}
}
11.3.1 @RestController和@RequestMapping注解
@RestController
是一个定型注解,便于人阅读代码,也标记Spring对类的动作。在这里代表可以接收web请求
@RequestMapping
是路由信息,它告诉Spring任何的HTTP请求到“/”都应该映射到home
这个方法上来。@RestController
告诉Spring将结果以字符串的形式返回给调用者
11.3.2 @EnableAutoConfiguration注解
@EnableAutoConfiguration
注解告诉Spring Boot基于你添加的jar依赖来猜测你想要的配置,因为spring-boot-starter-web
,所以添加了Tomcat和Spring MVC,它会完成相关的设置。
11.3.3 main方法
main
是一个标准的java方法,这个方法中声明了SpringApplication
,调用了run
方法,SpringApplication
将会启动我们的程序,Spring自动配置Tomcat容器。我们需要传入Example.class
给run
方法,告诉SpringApplication
扫描组件的路径,args
参数可以传入命令行参数来触发一些动作
11.4 运行示例
在项目目录下运行mvn spring-boot:run
来启动应用
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.16.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
打开浏览器访问localhost:8080,就可以看到输出:
Hello World!
结束运行使用ctrl-c
11.5 创建可执行jar
我们需要在POM文件的dependencies
片段下面添加spring-boot-maven-plugin
依赖:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
保存pom.xml
,然后运行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:1.5.16.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
这个命令会在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
的文件,这个是原始的jar文件,就是没有重新编译之前的jar文件
运行程序,java -jar
命令:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.16.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
12.接下来…
接下来第三部分将深入讲解怎么使用Spring Boot。。。