初入门径
这篇文章回答了什么是springboot,如何使用springboot,以及为什么要使用springboot。并且提供一个springboot的实例应用,讨论一些springboot的核心的原理
1.介绍springboot
springboot可以使单体环境或者生产环境中基于spring的应用程序编码运行更加简单,springboo使spring应用支持很多第三库,使得我们在开发基于spring的应用时使用更少的配置,做更多的事情。
通常我们在使用传统的spring应用程序时,会有复杂的操作流程,但是使用springboot,只需要简单的使用java命令就可以运行应用程序了,例如java -jar。
springboot的主要目标是:
- 让spring应用开发者可以迅速的上手springboot应用程序
- 远离大量的默认配置,将精力放到开发上面。
- 提供大量的非功能特性,比如security, metrics, health checks, and externalized configuratio
- 零代码生成,不需要配置xml文件。
2.系统要求
Spring Boot 2.1.5.RELEASE 版本需要java8版本,向上兼容到java11.
需要的spring版本是 Spring Framework 5.1.7.RELEASE及以上。如果要使用构建工具构建项目,工具的版本要求如下:
构建工具 | 版本号 |
---|---|
Maven | 3.3+ |
Gradle | 4.4+ |
2.1 Servlet容器
springboot支持下列的内置Servlet容器
名称 | Servlet版本 |
---|---|
Tomcat9.0 | 4.0 |
Jetty9.4 | 3.1 |
Undertow 2.0 | 4.0 |
也可以将springboot应用程序部署到兼容Servlet3.1+的容器。
3.使用springboot
springboot应用程序可以使用j传统的java开发集成环境或者java命令行,与此同时需要注意springboot所需要的jdk版本,可以在命令行中键入如下:
$ java -version
只需要注意jdk版本兼容springboot即可。
3.1 java开发者如何运行springboot应用程序
可以将springboot当做和普通Java库一样,只需要将正确的spring-boot-*.jar加入到classpath路径中,springboot应用不需要额外的工具集成就可以使用,所以可以使用任何IDE或者文本编辑器。springboot应用程序和普通Java程序一样可以快速使用并且调试。
虽然可以将springboot所需要的jar包手动拷贝到classpath工作路径,但是使用依赖管理工具,例如Maven或者Gradle会更加方便。
3.1.1 Maven安装
springboot和Maven3.3+兼容,如果你已还没有安装maven,那么你需要跟着这个链接maven.apache.org来安装下maven
springboot依赖使用 groupId为org.springframework.boot 一般情况下,Maven POM文件可以继承自spring-boot-starter-parent项目也可以声明一个或者多个 “Starters”.
springboot可以使用可选的 Maven 插件来创建可执行jars包。
下面展示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 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.1.5.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是一个很好的使用springboot的方式,但是并不是所有的时候都适合使用这种方式,有时你可能需要从其他的父POM继承,那么你就不会喜欢默认的设定,在这种情形下,可以参考 Section 13.2.2, “Using Spring Boot without the Parent POM”.到底使用哪种方式,主要是看应用环境。
4.开发首个Spring Boot应用程序
开始写一个简单的springboot版本的hello world 程序,并使用一些关键的springBoot关键特性,使用Maven来构建项目。
在开始之前,需要确保你的java版本和maven版本。
mvn -v命令检查maven是否安装按本是否适合。
4.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 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.1.5.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
4.2 添加classpath依赖
springboot提供很多的"Starters"来让你想classpath添加jars包,我们的实例应用已经使用了spring-boot-starter-parent 在POM parent区域中,sping-boot-starter-parent是一个特殊的starter,它提供了很多有用的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-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本身。
4.3 编写代码
为了完成我们的应用程序,需要编写一个Java文件。默认情况下,Maven 会变异src/main/java目录下的源文件,所以需要创建这个文件夹结构并加入一个src/main/java/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) {
SpringApplication.run(Example.class, args);
}
}
尽管代码写的很简短,但是代码背后有很多对开发者透明的过程,我们来看一下几个重要的过程。
4.3.1 @RestController和@RequestMapping注解
在我们的例子中的第一个注解是@RestController,它提供了阅读代码的暗示并且在spring中扮演特殊的角色。这本实例中,我们的类是一个web的@Controller。所以spring会在请求来到web端时考虑这个加了注解的类。
@RequestMapping注解提供了路由信息。它告诉Spring所有有路径信息的HTTP request应该映射到哪个home方法。@RestController注解告诉Spring将结果字符串直接返回给调用方。
4.3.2 @EnableAutoConfiguration注解
@EnableAutoConfiguration是二级注解,这个注解告诉springboot在基于你添加的jar包依赖下去猜测你想如何配置Spring。自从spring-boot-starter-web添加了tomcat和spring mvc,自动配置假定你在开发一个web应用程序并且相应的设置了Spring。
关于Starters和自动配置的关系:自动配置可以很好的配合Starters,但是这两个概念并不是直接绑定的,你爷可以将某些jar依赖从Starters中去掉,springboot依然会尽力而为的去对你的应用进行配置。
4.3.3 main方法
应用的最后一个部分就是main方法,这是一个程序入口的标准方法,主方法代表着springboot的SpringApplication,通过调用runSpringApplication启动我们的应用程序。启动spring,接下来启动自动配置的tomcat web服务器,我们需要将Example.class作为一个参数去执行这个方法来告诉SpringApplication哪个是基本的Spring组件。args数组也同时传递给应用来暴露所有的命令行参数。
4.4 运行示例
在这个点上,应用是可以工作的。我们使用了spring-boot-starter-parentPOM,可以使用有效的run目标来启动应用。在工程根目录下键入mvn spring-boot:run命令来启动应用程序,可以看到如下的输出:
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
打开web浏览器,输入地址localhost:8080,可以看到如下输出,
Hello World!
退出程序使用ctrl-c
4.5 创建一个可执行的jar包
最后我们需要生成一个可以在生产环境中运行的jar可执行jar包,可执行jar包使一个包含了所有的已编译classes和所有的依赖项的可执行的包。
在pom.xml文件中加入spring-boot-maven-plugin来创建一个可执行jar,需要向pom.xml文件中插入如下的依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parentPOM文件包括了<executions>配置来绑定repackage目标,如果没有使用父POM,你需要声明这个配置。
保存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:2.1.5.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
在target目录下,你将会发现myproject-0.0.1-SNAPSHOT.jar文件,使用java -jar命令行来运行程序,可以得到如下结果:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
若要退出程序,输入ctrl-c