-
安装 Spring Boot CLI
-
演示项目结构
-
用 Spring Boot CLI 创建 Hello World 示例
-
使用 @Grab 注释
-
Spring Boot CLI 测试应用程序
-
使用 Spring Boot CLI 打包应用程序
-
使用 Spring Boot CLI 创建一个新项目
-
使用嵌入式 Shell
-
参考文献
-
源码下载
Spring boot CLI是运行spring boot命令的命令行界面。
Spring提供了用于创建、运行和测试spring boot应用程序的spring命令。
Spring boot CLI应用程序使用groovy语言,通过这种方式,我们用最少的代码行创建我们的应用程序并启动它。
使用groovy的Spring boot CLI具有以下特点。
-
Spring boot CLI应用程序使用groovy。我们在应用程序中创建groovy文件,为此我们不需要提供groovy的任何JAR依赖。Spring boot会自己配置groovy的JAR依赖项。
-
在编写groovy文件时,我们不需要写导入语句,直到需要为止。在写导入语句之前,我们应该检查我们是否得到导入错误。通过这种方式,我们尽可能地写出最少的代码行数。
-
Spring boot CLI不需要任何构建工具。Spring boot以与Maven和Gradle相同的方式自动抓取spring依赖JAR包。版本是从Spring Boot CLI的版本中提取的。
-
Spring boot下载JAR依赖项时,通过记住我们在应用程序编码中使用了哪些spring注解和类。如果我们使用
@Controller
注解,那么Spring Boot就会下载Spring Web应用程序的JAR依赖项。 -
为了下载第三方依赖的JAR,如thymleaf,spring boot使用
@Grab
注释groovy功能。 -
Spring boot提供
spring run
命令来运行应用程序,spring test
命令来运行spring测试应用程序。 -
我们可以使用spring boot命令行创建可执行的JAR文件。对于应用程序的打包,spring boot提供
spring jar
命令。 -
使用命令行界面,我们可以使用spring init命令从
spring initializer
站点创建项目。 -
Spring boot为Windows用户提供了使用
spring shell
命令的集成外壳。 -
使用spring boot CLI时,我们不需要创建
spring boot main()
方法。它是由spring boot CLI自动提供的。
在这一篇,我们将安装spring boot CLI,然后我们将创建一个spring boot CLI示例应用程序,并运行它和测试它。
安装 Spring Boot CLI
要使用Spring boot CLI,首先我们需要在系统中安装它。有很多方法可以安装Spring boot CLI。
-
手动安装
-
使用SDKMAN进行安装!
-
OSX自制软件的安装
-
MacPorts的安装
-
命令行完成
找到Spring boot CLI安装细节的链接。在我的例子中,我将在我的Windows 7操作系统中使用手动安装来安装Spring boot CLI。找到下面的步骤。
步骤1:使用以下链接下载Spring boot CLI
<pre class="prettyprint hljs ruby" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.4.3.RELEASE/spring-boot-cli-1.4.3.RELEASE-bin.zip
</pre>
步骤2:解压缩并保存在你系统的某个地方。假设我把它保存在如下位置。
<pre class="prettyprint hljs css" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`C:\spring-1.4.3.RELEASE` </pre>
现在我们需要在我们的系统中设置以下环境变量。
-
SPRING_HOME的值为
C:\spring-1.4.3.RELEASE
-
PATH的值为
C:\spring-1.4.3.RELEASE\bin
步骤3:现在我们将测试我们的安装。打开命令提示符并键入命令spring,我们将得到以下结果。
图片
查找更多Spring boot CLI命令。
-
spring help run
: 提供支持的命令的详细信息。 -
spring version
: 提供Spring boot CLI的版本。
现在我们可以开始使用Spring boot CLI了。
演示项目结构
找到演示项目结构,我们将使用spring boot CLI和groovy来运行。
<pre class="prettyprint hljs lua" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring-app
|
--message.groovy
--hello.groovy
--tests.groovy
--templates
|
--hello.html
--static
|
--index.html` </pre>
用 Spring Boot CLI 创建 Hello World 示例
我们将使用Groovy创建一个简单的 "Hello World"网络应用。请看下面的代码。
hello.groovy
<pre class="prettyprint hljs dart" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`@RestController
class HelloController {
@RequestMapping("/home")
String home() {
"Hello World!"
}
}` </pre>
当我们使用Spring boot CLI和Groovy时,我们可以用最少的代码运行我们的应用程序。在我们的代码中,我们将得到以下结果。
-
默认的导入语句。在大多数情况下,我们不需要导入API。只有在不属于默认导入语句的情况下才可以导入。
-
spring boot没有main方法。它将被自动创建。
为了编译和运行Groovy源代码,Spring boot CLI提供了run命令,我们按以下方式调用。
<pre class="prettyprint hljs dockerfile" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring run hello.groovy` </pre>
使用该命令,我们实现了以下几点。
-
它下载所有的依赖性JAR。依赖性JAR的版本由我们所使用的Spring boot CLI的版本决定。下载JAR只在第一次时进行。
-
依赖性JAR是由代码中使用的类和注解定义的。由于我们使用的是
@RestController
,所以会下载与Spring MVC和嵌入式Tomcat相关的JAR。 -
现在它编译代码并在默认端口8080上启动嵌入式Tomcat服务器。
找到打印界面。
图片
通过URL http://localhost:8080/home
来访问该应用程序。
图片
如果我们想改变默认端口,那么我们需要用 server.port
运行命令,如下所示。
<pre class="prettyprint hljs dockerfile" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring run hello.groovy -- --server.port=8484` </pre>
我们需要注意,我们将使用分隔符--与spring命令参数 --server.port
一起。现在,嵌入式Tomcat将以8484端口启动,为了运行应用程序,我们需要使用 http://localhost:8484/home
来访问。
如果我们有多个groovy文件,并且要一起运行所有这些groovy文件,我们可以使用以下命令。
<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring run *.groovy` </pre>
使用 @Grab 注释
Groovy提供了@Grab注解来解决JAR的依赖性。
Spring boot也支持@Grab注解,只解决第三方的依赖。
根据Spring注解和应用程序中使用的类,Spring的依赖性被自动抓取。
它下载JAR的方式与Maven和Gradle相同,无需使用任何构建工具。我们使用@Grab注解来下载第三方依赖,如下所示。
<pre class="prettyprint hljs css" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`@Grab('spring-boot-starter-thymeleaf')
class MessageController {}` </pre>
在上面的代码中,我们将看到我们只需要传递artifact id。Group id 和 version将从spring boot的默认依赖元数据中获取。
现在找到这个例子中使用的groovy和HTML文件。
message.groovy
<pre class="prettyprint hljs kotlin" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`@Controller
@Grab('spring-boot-starter-thymeleaf')
class MessageController {
@RequestMapping("/msg")
String getMsg(Model model) {
String msg = "Welcome to Everyone!";
model.addAttribute("message", msg);
return "hello";
}
}` </pre>
templates/hello.html
<pre class="prettyprint hljs dust" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Boot CLI Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'Message: ' + ${message}" />
</body>
</html>` </pre>
static/index.html
<pre class="prettyprint hljs xml" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`<!DOCTYPE HTML>
<html>
<head>
<title>Spring Boot CLI Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p>Click to get <a href="/msg">Message</a> </p>
</body>
</html>` </pre>
要运行这个例子,在项目的根目录下用命令提示符运行以下命令。
<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring run *.groovy` </pre>
现在访问 http://localhost:8080/
Spring boot只需要@Grab注解来解决第三方JAR,例如spring-boot-starter-thymeleaf,freemarker等。
Spring boot会根据需要自动抓取spring JAR。
例如,如果我们使用以下注解和类,那么相关的JAR依赖将被自动下载。
-
@Controller @RestController @EnableWebMvc : 在这种情况下,Spring MVC和嵌入式Tomcat将被下载。
-
@EnableWebSecurity : Spring安全相关的JAR将被下载。
-
@EnableJms: JMS应用程序相关的JAR将被下载。
-
@Test : 将会下载Spring测试应用相关的JAR。
具体请查看链接中的Deduced “grab” Dependencies部分
Spring Boot CLI 测试应用程序
Spring boot CLI提供了test命令,我们可以用它来测试我们的spring boot应用程序。找到我们例子中使用的groovy类来测试hello.groovy。
tests.groovy
<pre class="prettyprint hljs java" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`class ApplicationTests {
@Test
void HelloAppTest() {
assertEquals("Hello World!", new HelloController().home())
}
}` </pre>
要运行测试应用程序,请使用以下命令。
<pre class="prettyprint hljs css" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring test hello.groovy tests.groovy` </pre>
上述命令的说明如下。
-
spring test
:Spring boot CLI命令,用于测试应用程序。 -
hello.groovy
:需要测试的应用程序文件。 -
tests.groovy
:测试文件,用于测试应用程序文件。
运行该命令后,我们得到的结果如下。
图片
使用 Spring Boot CLI 打包应用程序
Spring boot CLI提供了jar命令来打包我们的应用程序。我们可以按以下方式使用它。
<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring jar spring-app.jar *.groovy` </pre>
这将创建两个JAR。
-
spring-app.jar
: 这是可执行的JAR。 -
spring-app.jar.original
: 这是原JAR。
可执行的jar文件的运行方式如下。
<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`java -jar spring-app.jar` </pre>
找到打印界面。
图片
在打包应用程序时,spring boot默认包括以下目录。
<pre class="prettyprint hljs awk" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`public/**, resources/**, static/**, templates/**, META-INF/**` </pre>
而默认的排除目录是
<pre class="prettyprint hljs markdown" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`repository/**, build/**, target/**, **/*.jar, **/*.groovy` </pre>
使用 --include
,我们可以将默认排除目录添加到打包的目录中。使用 --exclude
,我们可以删除打包的目录。有关更多详细信息,我们可以按如下方式运行help命令。
<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring help jar` </pre>
使用 Spring Boot CLI 创建一个新项目
使用init命令,Spring boot CLI可以用maven作为默认的构建工具创建一个新项目,该工具使用 https://start.spring.io
。假设我们想用thymleaf创建一个Web项目,那么我们将运行如下命令。
<pre class="prettyprint hljs swift" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring init --dependencies=web,thymeleaf my-app.zip` </pre>
在pom.xml中,web,thymeleaf的依赖关系将配置为以下spring boot启动器。
<pre class="prettyprint hljs" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring-boot-starter-web
spring-boot-starter-thymeleaf` </pre>
my-app.zip文件将被下载到我们运行命令的目录中。
图片
如果我们想使用Gradle构建工具,用任何特定的java版本构建WAR文件,那么我们可以运行如下命令。
<pre class="prettyprint hljs swift" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring init --build=gradle --java-version=1.8 --dependencies=web,thymeleaf --packaging=war my-app.zip` </pre>
使用嵌入式 Shell
Spring boot有BASH和Zsh shells的命令行完成脚本。
如果我们使用WINDOWS,Spring Boot提供shell命令来启动一个集成shell。如果使用WINDOWS,那么使用以下命令启动集成shell。
<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`spring shell` </pre>
现在我们可以直接运行命令而不使用spring关键字,如
<pre class="prettyprint hljs ruby" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">`$ version
$ test hello.groovy tests.groovy
$ run hello.groovy` </pre>
找到打印界面。
网友评论