Spring学习系列 一
Getting Started
Spring Boot可以和经典的Java开发工具或者命令行工具一起使用,但是无论如何需要有JDK1.8以上的支持。
在开始之前,需要检查一下你的JDK版本
// check JDK version
$ java -version
1.安装教程
你可以像使用其他的标准的Java库一样来使用Spring Boot,只需要将spring-boot-*.jar文件适当的包含到你的classpath即可。Spring Boot不需要任何特殊的集成工具,所以你可以使用任何你喜欢的编辑器或者IDE.并且,对于一个Spring Boot应用来说,和其他的Java应用没有什么不同。你可以像调试其他的Java应用程序一样来调试你的Spring Boot应用程序。
虽然你完全可以将Spring Boot的jar包拷贝到你的工程目录然后使用,但我们强烈建议您使用支持依赖管理的构建工具,比如说Maven或者Gradle
JDK安装
这里就不说了,网上的教程一搜一大把,注意版本要在1.8以上
Maven安装
Spring Boot支持Apache Maven3.3以上的版本,安装指南可以参照这个链接
提示:
如果你使用 OSX:
// Install maven on OSX
$ brew install maven
如果你使用 Ubuntu:
// Install maven on ubuntu
$ sudo apt-get install maven
注意检查一下版本
// check maven version
$ mvn --version
注意:如果版本低于3.3,则需要手动安装,和JDK安装基本一样,设置好环境变量就OK。
Spring Boot的依赖使用 org.springframework.boot groupId
。典型用法是你的Maven的pom文件继承spring-boot-starter-parent
工程并且申明对一个或者多个Starters的依赖。Spring Boot也支持一个可选的Maven插件来创建可执行的jar包。下面是一个典型的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>2.1.0.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是使用Spring Boot的很好的方式
2.安装Spring Boot CLI
Spring Boot CLI(Command Line Interface)是一个你可以快速构建Spring应用的命令行接口i,它让你可以运行Groovy脚本。当然了,你也可以不使用Spring Boot CLI,但使用Spring Boot CLI绝对是构建Spring应用的最快方式。
手动安装
下载链接
下载完成之后解压缩,在bin目录下有可执行文件(win下有.bat文件)
测试(Linux下)
// test spring Boot CLI
$ ./spring --version
windows下
// test spring Boot CLI
$ .\spring.bat --version
命令行接口测试
首先创建一个名叫app.groovy的文件,内容如下:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
从命令行运行(Linux)
$ spring run app.groovy
Windows下
$ .\spring.bat run app.groovy
注意:第一次运行需要下载依赖包,需要等待几分钟,然后打开浏览器,在地址栏输入 localhost:8080 即可看到如下输出:
Hello World!
3.创建你的第一个Spring Boot应用
开始之前首先确认一下我们的JDK和Maven都安装正确了,因为下面将会用到它们。
3.1创建一个项目
新建一个文件夹,名为test1,所有的项目文件将存放在这个文件夹里面
3.2创建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>2.1.0.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
在test1文件夹下,执行
$ mvn package
Spring Boot提供了很多的Starters来让你添加jar包到你的calsspath。我们的例程在POM文件里面的parent段里面使用了spring-boot-starter-parent
。spring-boot-starter-parent
是一个特殊的starter,可以提供很多的默认的Maven设置。也提供了一个dependency-management
段,这样你可以省略version标签。
当你开发某一特定类型的应用的我时候,其他的starter提供了你可能需要的依赖。因为我们是在开发一个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 server和Spring Boot自己。
3.3 编写代码
在test1文件夹下创建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) throws Exception {
SpringApplication.run(Example.class, args);
}
}
尽管这里的代码不多,但是后面却有很多东西在运行。我们将在下面进行分析。
3.3.1 @RestController 和 @RequestMapping 注解
我们的Example类中的第一个注解是@RestController
.这是一个被称为原型的注解。作用是告诉阅读代码的人,这个类扮演着一个特殊的角色。在本例中,我们的类是一个web @Controller,所以再有web请求的时候,Spring就会考虑到它。
我们的 @RequestMapping
注解提供了一个路由的信息。它告诉Spring,任何带有/
的HTTP请求都应该被映射到home
方法。@RestController
注解告诉Spring将结果直接返回给调用者。
注意:这里的 @RestController
和RequestMapping
注解都是Spring MVC的注解。
3.3.2 @EnableAutoConfiguration 注解
第二个类级别的注解是@EnableAutoConfiguration
。这个注解告诉Spring Boot,基于你添加的jar包的依赖,去“猜测”你将如何配置你的Spring。由于spring-boot-starter-web
添加了Tomcat和SpringMVC,自动配置将认为你是在开发一个web应用并将为之设置Spring.
Starters 和Auto-configuration
Auto-configuration被用来和Starters更好的工作,但是这两个概念并不是直接联系在一起的。你可以选择Starter之外的jar包依赖.Spring-Boot任然会竭尽全力为你缴纳自动配置好你的应用。
3.3.3 main方法
我们的应用的最后一个部分就是main方法。我们的main方法通过调用run方法来调用Spring Boot的SpringApplication
.SpringApplication
将会启动我们的应用,启动Spring,Spring会启动自动配置好的Tomcat。我们需要将Example.class作为一个参数传递给run方法,告诉SpringApplication哪一个是基本的Spring单元。args也传递过去以曝露任何需要的命令行参数。
3.4运行例程
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
打开浏览器,访问localhost:8080,将会开到如下输出:
Hello World !
3.5创建一个可执行的jar包
在最后,我们将创建一个可以在生产环境中运行的jar包来结束例程。可执行jar包(有时候被称为“fat jars”)是包含着编译好的类和依赖的jar包的文件集合。
可执行jar包和Java
Java并不提供一个标准的方法来加载递归的jar包(本身包含jar包的jar包)。如果你需要一个自我包含的发行版的应用的话就有问题了。
为了解决这个问题,很多开发者使用“uber”jar包。“uber”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已经包含了<executions>
配置来绑定repackage
目标。如果你不使用parent 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.0.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
此时,你会发现你的test1/target文件夹下,会出现一个myproject-0.0.1-SNAPSHOT.jar,十多MB大小,想看里面的内容,使用:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
在target文件夹下,可以看到一个小得多的文件 myproject-0.0.1-SNAPSHOT.jar.original
这是Spring重新打包之前maven之前创建的。
运行这个应用,需要使用java -jar命令:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
参考:
[1]https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-documentation