1. SpringBoot介绍
SpringBoot可以使开发者轻松地创建独立地,生产级的,基于Spring的应用程序。SpringBoot对Spring平台以及第三方库采用一些约定,使得开发者可以轻松上手SpringBoot。大多数的SpringBoot应用仅需要非常少的Spring配置。
开发者可以通过SpringBoot创建一个通过java -jar
命令或传统的war包部署方式启动的Java应用程序,当然,SpringBoot也提供可以运行“Spring脚本”的命令行工具。
SpringBoot的主要目标是:
- 为所有Spring开发提供一个更快、更广泛的入门体验
- 开箱即用,但随着需求开始偏离默认值,快速退出
- 提供大型项目(例如嵌入式服务器,安全性,指标,运行状况检查,外部配置)通用的一系列非功能性功能
- 绝对不会生成代码,并且不需要XML配置
2. 系统要求
默认条件下,SpringBoot1.5.14版本要求Java7、Spring框架版本为4.3.18、Maven(3.2+)及以上,推荐使用Java8
3. 支持的Servlet容器
Name | Servlet Version | Java Version |
---|---|---|
Tomcat 8 | 3.1 | Java 7+ |
Tomcat 7 | 3.0 | Java 6+ |
Jetty 9.3 | 3.1 | Java 8+ |
Jetty 9.2 | 3.1 | Java 7+ |
Jetty 8 | 3.0 | Java 6+ |
Undertow 1.3 | 3.1 | Java 7+ |
注:你同样可以将SpringBoot应用部署在任何兼用Servlet3.0+的容器
4. Maven 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>1.5.14.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>
上面的是SpringBoot典型的pom配置文件(你也可以通过Gradle进行构建项目)
spring-boot-starter-parent
是使用SpringBoot的一种很好的方式,但不一定始终适用。有时候,你或许想要继承一个不同的父类pom文件,或者你不喜欢SpringBoot的配置,你可以通过Maven的import scope依赖来适用SpringBoot
5. 安装SpringBoot的命令行界面
Spring Boot CLI是一个命令行工具,如果你想用Spring快速建立原型,可以使用它。 它允许你运行Groovy脚本,这意味着你有一个熟悉的类Java语法,没有太多的样板代码。
你不一定需要通过命令行界面来使用SpringBoot,但这绝对是一种最快实现Spring应用的方式。
5.1 手动安装
下载地方:
下载完成后,按照解压后的文件夹中的INSTALL.txt文件进行操作,总而言之:在.zip文件的bin /目录中有一个spring脚本(适用于Windows的spring.bat),或者可以使用java -jar和.jar文件(该脚本可帮助您确保类路径设置正确)。
5.2 SDKMAN方式安装
SDKMAN! (软件开发工具包管理器)可用于管理各种二进制SDK的多个版本,包括Groovy和Spring Boot CLI。 获取SDKMAN! 从sdkman.io安装Spring Boot
$ sdk install springboot
$ spring --version
Spring Boot v1.5.14.RELEASE
如果您正在开发CLI的功能并希望轻松访问您刚刚构建的版本,请按照这些额外说明进行操作
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.5.14.RELEASE-bin/spring-1.5.14.RELEASE/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.5.14.RELEASE
这将安装称为dev实例的spring的本地实例。 它指向您的目标构建位置,因此每次重建Spring Boot时,Spring版本都是最新的。
你可以通过这样做来看到它:
$ sdk ls springboot
================================================================================
Available Springboot Versions
================================================================================
> + dev
* 1.5.14.RELEASE
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
5.3 命令行补全
Spring Boot CLI附带提供BASH和zsh shell的命令补全的脚本。在Debian系统上,系统范围的脚本在/ shell-completion / bash中,并且在新shell启动时会自动执行该目录中的所有脚本。 要手动运行脚本,例如 如果你已经安装使用SDKMAN!
$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
grab help jar run test version
5.4 命令行快速启动例子
这是一个非常简单的Web应用程序,您可以使用它来测试您的安装。 创建一个名为app.groovy
的文件:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
由于下载依赖关系,首次运行应用程序时需要一些时间。 后续运行会更快
在浏览器中打开localhost:8080,应该看到以下输出:
Hello World!
6. 创建第一个SpringBoot应用程序
使用Java开发一个简单的“Hello World!”Web应用程序,它突出了Spring Boot的一些主要特性。 我们将使用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
6.1 创建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>1.5.14.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
6.2 添加依赖
SpringBoot提供很多很容易添加jar包到类路径下的Starters。我们的示例应用程序已经在POM的parent节点中使用了spring-boot-starter-parent。spring-boot-starter-parent是一个专门的提供有效的Maven默认值的Starter。
其他的Starters仅仅提供你开发特定类型的应用程序的时候需要的依赖。由于我们正在开发一个Web应用程序,因此我们将添加一个spring-boot-starter-web依赖项,但在此之前,让我们看看我们目前maven依赖关系数:
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree这个命令会在控制台打印出当前项目所以依赖的树形关系。你可以看到spring-boot-starter-parent本身不提供依赖关系。继续在pom.xml文件中添加如下依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果现在重新运行mvn dependency:tree 命令,可以在很多额外的依赖,包括tomcat和spring boot。
6.3 编写代码
在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);
}
}
6.3.1 @RestController和@RequestMapping注解
在上面的例子中,使用到@RestController注解,这是一个表示,告诉阅读代码的人和Spring,这个类扮演了一个特定的角色,是一个Controller,用于处理外来的请求。
@RequestMapping注解提供的请求的路径信息,它告诉Spring,这个带“/”的HTTP请求应该映射到那个地方。
6.3.2 @EnableAutoConfiguration注解
这个注解告诉SpringBoot,让它去基于开发者添加的Jar包依赖,“猜测”开发者想要如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,因此自动配置将假定开发者正在开发Web应用程序并相应地设置Spring。
自动配置旨在与“Starter”配合使用,但这两个概念并不直接相关。 您可以自由选择和选择Starter之外的jar依赖项,并且Spring Boot将尽其所能自动配置您的应用程序。
6.3.3 “main”方法
程序最后一部分是main方法,这只是一个遵循Java约定的应用程序入口的标准方法。这个main方法代表SpringBoot应用程序的运行入口。SpringApplication将引导我们的应用程序,从Spring开始,它将启动自动配置的Tomcat Web服务器。我们需要将Example.class作为参数传递给run方法,以告知SpringApplication是Spring的主要组件。 args数组也被传递以暴露任何命令行参数。
7. 运行第一个SpringBoot应用程序
键入mvn spring-boot:从根项目目录运行以启动应用程序
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.14.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
此时打开浏览器,访问localhost:8080,你会看见如下输出
Hello World!
8. 创建可执行的JAR包
执行jar包中包含编译类以及代码运行所需的所有依赖的jar包.
Java不提供任何标准的方法来加载嵌套的jar文件(即它们本身包含在jar中的jar文件)。 如果您想发布自包含的应用程序,这可能会有问题。
为了解决这个问题,很多开发者会使用"uber" jars.一个uber jar只需要将所有jar包中的类打包陈一个单独的档案.这种方法的问题在于,很难在应用程序中看到实际使用的库.如果多个jar包中存在相同的文件名,这样也有可能会出现问题.
SpringBoot提供一种不同的方式允许开发者加载嵌套的jar包.
为了创建可执行的jar包,我们需要在工程的pom文件中插入spring-boot-maven-plugin配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
保存pom文件之后,在控制台中输入如下命令
$ 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.14.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
查看工程根目录的target文件夹,你可以看到myproject-0.0.1-SNAPSHOT.jar文件,你可以通过命令jar tvf窥视jar包中的内容
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
可以通过运行java -jar命令来启动程序
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.14.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
这样子程序就运行起来了,如果想要退出程序只需要ctrl + c
即可。
注:文章翻译自SpringBoot 1.5.14参考手册,选取了部分我需要的进行翻译,如有必要,请翻阅英文文档。
网友评论