Spring Boot CLI(命令行界面)是一个命令行工具,您可以使用它来快速使用Spring进行原型开发。 它可以让你运行Groovy脚本,这意味着你有一个熟悉的类Java语法,没有太多的样板代码。
您不需要使用CLI来与Spring Boot一起工作,但这绝对是让Spring应用程序起飞的最快捷方式。
10.2.1手动安装
您可以从Spring软件存储库下载Spring CLI发行版:
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.0.0.BUILD-SNAPSHOT-bin/spring-2.0.0.BUILD-SNAPSHOT/
$ sdk default springboot dev
$ spring --version
Spring CLI v2.0.0.BUILD-SNAPSHOT
前面的说明安装了一个名为dev实例的spring的本地实例。 它指向你的目标构建位置,所以每当你重建Spring Boot时,spring都是最新的。
您可以通过运行以下命令来查看它:
$ sdk ls springboot
================================================================================
> + dev
* 2.0.0.BUILD-SNAPSHOT
================================================================================
+ - local version
* - installed
10.2.3 OSX Homebrew安装
为了完成我们的应用程序,我们需要创建一个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) throws Exception {
SpringApplication.run(Example.class, args);
虽然这里没有太多的代码,但还是有很多重要的事在里头。 我们将在接下来的几节中介绍一些重要的部分。
11.3.1 @RestController和@RequestMapping注解
我们的Example
类的第一个注解是@RestController
。 这被称为stereotype
注解。 它为阅读代码的人提供了线索,对于Spring来说,这个类扮演着特定的角色。 在这种情况下,我们的类是一个web @Controller,所以Spring在处理传入的Web请求时会考虑它。
@RequestMapping
注解提供了“路由”信息。 它告诉Spring,任何带有/ path
的HTTP请求都应该映射到home
方法。@RestController
注解告诉Spring将结果字符串直接返回给调用者。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
如果你打开一个web浏览器到localhost:8080你应该看到下面的输出:
Hello World!
要正常退出应用程序点击
ctrl-c
。
让我们通过创建一个完全独立的可执行jar文件来完成我们的例子,我们可以在生产环境中运行它。 可执行jar(有时也称为“fat jars”)是包含您编译的类以及您的代码需要运行的所有jar依赖项的归档文件。
可执行的jar和Java
Java不提供任何标准的方式来加载嵌套的jar文件(即jar文件本身包含在jar中)。 如果您正在分发自包含的应用程序,这可能会有问题。
为了解决这个问题,许多开发者使用“超级”罐子。 超级罐子只是将所有罐子里的所有类打包成一个单一的档案。 这种方法的问题在于,很难在应用程序中看到实际使用的库。 如果在多个罐子中使用相同的文件名(但是具有不同的内容),则也可能是有问题的。
Spring Boot采用了不同的方法,可以直接嵌入jar。
要创建一个可执行的jar文件,我们需要将
spring-boot-maven-plugin
添加到我们的
pom.xml
。 在依赖关系部分下面插入以下几行:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
[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
.
9
.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果您查看目标目录,则应该看到myproject-0.0.1-SNAPSHOT.jar。 该文件大小应该在10 MB左右。 如果你想查阅里面的内容,你可以使用jar tvf:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
像以前一样,要优雅地退出应用程序点击
ctrl-c
。
如上所述,该设置不允许您使用属性覆盖单个依赖项。 为了达到同样的结果,你需要在spring-boot-dependencies条目之前在项目的dependencyManagement中添加一个条目。 例如,要升级到另一个Spring Data发行版,您需要将以下内容添加到您的pom.xml中。
spring-boot-gradle-plugin也是可用的,并提供了创建可执行的jar和从源代码运行项目的任务。 它还提供依赖性管理,除其他功能外,还允许您省略由Spring Boot管理的任何依赖项的版本号: