当前位置:   article > 正文

Spring Boot:四大神器之CLI_spring boot cli

spring boot cli


简介

Spring Boot有四大神器,分别是auto-configuration、starters、cli、actuator

Spring boot CLI是运行spring boot命令的命令行界面。Spring提供了用于创建、运行和测试spring boot应用程序的spring命令。Spring boot CLI应用程序使用groovy语言,通过这种方式,我们用最少的代码行创建我们的应用程序并启动它。

Spring Boot CLI 为Spring Cloud 提供了Spring Boot 命令行功能。您可以编写groovy脚本来运行Spring Cloud 组件应用程序(例如@enableurekaserver)。您还可以轻松地执行加密和解密等操作,以支持具有机密配置值的 SpringCloud 配置客户端。使用启动器cli,您可以从命令行方便地同时启动诸如eureka、zipkin、config server等服务(这在开发时非常有用)。

这篇简短的文章快速介绍了如何配置Spring Boot CLI并执行简单的终端命令来运行预配置的微服务。

我们将在本文中使用Spring Boot CLI 2.0.0.RELEASE。可以在Maven Central找到最新版本的Spring Boot CLI 。

优势

  • 1.Spring boot CLI应用程序使用groovy。我们在应用程序中创建groovy文件,为此我们不需要提供groovy的任何JAR依赖。Spring boot会自己配置groovy的JAR依赖项。
  • 2.在编写groovy文件时,我们不需要写导入语句,直到需要为止。在写导入语句之前,我们应该检查我们是否得到导入错误。通过这种方式,我们尽可能地写出最少的代码行数。
  • 3.Spring boot CLI不需要任何构建工具。Spring boot以与Maven和Gradle相同的方式自动抓取spring依赖JAR包。版本是从Spring Boot CLI的版本中提取的。
  • 4.Spring boot下载JAR依赖项时,通过记住我们在应用程序编码中使用了哪些spring注解和类。如果我们使用@Controller注解,那么Spring Boot就会下载Spring Web应用程序的JAR依赖项。
  • 5.为了下载第三方依赖的JAR,如thymleaf,spring boot使用@Grab注释groovy功能。
  • 6.Spring boot提供spring run命令来运行应用程序,spring test命令来运行spring测试应用程序。
  • 7.我们可以使用spring boot命令行创建可执行的JAR文件。对于应用程序的打包,spring boot提供spring jar命令。
  • 8.使用命令行界面,我们可以使用spring init命令从spring initializer站点创建项目。
  • 9.Spring boot为Windows用户提供了使用spring shell命令的集成外壳。
  • 10.使用spring boot CLI时,我们不需要创建spring boot main()方法。它是由spring boot CLI自动提供的。

一、安装 Spring Boot CLI

找到Spring boot CLI安装细节的链接。在我的例子中,我将在我的Windows 7操作系统中使用手动安装来安装Spring boot CLI。找到下面的步骤。
步骤1:使用以下链接下载Spring boot CLI

http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.4.3.RELEASE/spring-boot-cli-1.4.3.RELEASE-bin.zip

步骤2:解压缩并保存在你系统的某个地方。假设我把它保存在如下位置。

C:\spring-1.4.3.RELEASE

现在我们需要在我们的系统中设置以下环境变量。

SPRING_HOME的值为C:\spring-1.4.3.RELEASE
PATH的值为C:\spring-1.4.3.RELEASE\bin

步骤3:现在我们将测试我们的安装。打开命令提示符并键入命令spring,我们将得到以下结果。
在这里插入图片描述

二、测试

找到演示项目结构,我们将使用spring boot CLI和groovy来运行。

spring-app
   |
    --message.groovy  
    --hello.groovy 
    --tests.groovy
    --templates
         |
          --hello.html
    --static
        |
         --index.html
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.1 Spring Boot CLI 创建 Hello World 示例

我们将使用Groovy创建一个简单的 "Hello World"网络应用。请看下面的代码。

hello.groovy

@RestController
class HelloController {
    @RequestMapping("/home")
    String home() {
        "Hello World!"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

当我们使用Spring boot CLI和Groovy时,我们可以用最少的代码运行我们的应用程序。在我们的代码中,我们将得到以下结果。

  1. 默认的导入语句。在大多数情况下,我们不需要导入API。只有在不属于默认导入语句的情况下才可以导入。
  2. spring boot没有main方法。它将被自动创建。

为了编译和运行Groovy源代码,Spring boot CLI提供了run命令,我们按以下方式调用。

spring run hello.groovy
  • 1

使用该命令,我们实现了以下几点。

  1. 它下载所有的依赖性JAR。依赖性JAR的版本由我们所使用的Spring boot CLI的版本决定。下载JAR只在第一次时进行。
  2. 依赖性JAR是由代码中使用的类和注解定义的。由于我们使用的是@RestController,所以会下载与Spring MVC和嵌入式Tomcat相关的JAR。
  3. 现在它编译代码并在默认端口8080上启动嵌入式Tomcat服务器。

找到打印界面。
在这里插入图片描述
通过URL http://localhost:8080/home 来访问该应用程序。

spring run hello.groovy -- --server.port=8484
  • 1

2.2 @Grab

Groovy提供了@Grab注解来解决JAR的依赖性。

Spring boot也支持@Grab注解,只解决第三方的依赖。

根据Spring注解和应用程序中使用的类,Spring的依赖性被自动抓取。

它下载JAR的方式与Maven和Gradle相同,无需使用任何构建工具。我们使用@Grab注解来下载第三方依赖,如下所示。

@Grab('spring-boot-starter-thymeleaf')
class MessageController {}
  • 1
  • 2

在上面的代码中,我们将看到我们只需要传递artifact id。Group id 和 version将从spring boot的默认依赖元数据中获取。

现在找到这个例子中使用的groovy和HTML文件。

message.groovy

@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";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

templates/hello.html

<!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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

static/index.html

<!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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

要运行这个例子,在项目的根目录下用命令提示符运行以下命令。

spring run *.groovy
  • 1

现在访问 http://localhost:8080/

2.3 @ Controller,@ RestController和@EnableWebMvc

为了进一步加快部署,我们可以使用Spring Boot CLI提供的“抓取提示”来自动推断要导入的正确依赖项。

我们将介绍下面一些最常见的用例。

例如,我们可以使用熟悉的@Controller和@Service注释来快速构建标准MVC控制器和服务:

@RestController
class Example {
  
    @Autowired
    private MyService myService;
 
    @GetMapping("/")
    public String helloWorld() {
        return myService.sayWorld();
    }
}
 
@Service
class MyService {
    public String sayWorld() {
        return "World!";
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Spring Boot CLI支持Spring Boot的所有默认配置。因此,我们的Groovy应用程序可以自动从其通常的默认位置访问静态资源。

2.4 @ EnableWebSecurity

要将 Spring Boot Security 选项添加到我们的应用程序,我们可以使用@EnableWebSecurity注解,然后由 Spring Boot CLI 自动下载。

下面,我们将使用spring-boot-starter-security依赖项来抽象此过程的一部分,该依赖项利用了引擎下的@EnableWebSecurity注释:

package org.test
 
@Grab("spring-boot-starter-security")
 
@RestController
class SampleController {
 
    @RequestMapping("/")
    public def example() {
        [message: "Hello World!"]
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.5 @Test

要设置一个简单的JUnit测试,我们可以添加@Grab(‘junit’)或@Test注解:

package org.test
 
@Grab('junit')
class Test {
    //...
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这将允许我们轻松地执行JUnit测试。

2.6 DataSource和JdbcTemplate

可以指定持久数据选项,包括DataSource或JdbcTemplate,而无需显式使用@Grab注释:

package org.test
 
@Grab('h2')
@Configuration
@EnableWebMvc
@ComponentScan('org.test')
class DataConfig {
 
    @Bean
    DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
          .setType(EmbeddedDatabaseType.H2).build();
    }
 
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

三、打包

Spring boot CLI提供了jar命令来打包我们的应用程序。我们可以按以下方式使用它。

spring jar spring-app.jar *.groovy
  • 1

这将创建两个JAR。

  • spring-app.jar : 这是可执行的JAR。
  • spring-app.jar.original : 这是原JAR。

可执行的jar文件的运行方式如下。

java -jar spring-app.jar
  • 1

找到打印界面。
在这里插入图片描述

在打包应用程序时,spring boot默认包括以下目录。

public/, resources/, static/, templates/, META-INF/**

而默认的排除目录是

repository/, build/, target/**, **/.jar, **/.groovy

使用–include,我们可以将默认排除目录添加到打包的目录中。使用–exclude,我们可以删除打包的目录。有关更多详细信息,我们可以按如下方式运行help命令。

spring help jar

四、构建

使用init命令,Spring boot CLI可以用maven作为默认的构建工具创建一个新项目,该工具使用https://start.spring.io。假设我们想用thymleaf创建一个Web项目,那么我们将运行如下命令。

spring init --dependencies=web,thymeleaf my-app.zip

在pom.xml中,web,thymeleaf的依赖关系将配置为以下spring boot启动器。

spring-boot-starter-web
spring-boot-starter-thymeleaf

my-app.zip文件将被下载到我们运行命令的目录中。
在这里插入图片描述
如果我们想使用Gradle构建工具,用任何特定的java版本构建WAR文件,那么我们可以运行如下命令。

spring init --build=gradle --java-version=1.8 --dependencies=web,thymeleaf --packaging=war my-app.zip

六、嵌入式 Shell

Spring boot有BASH和Zsh shells的命令行完成脚本。

如果我们使用WINDOWS,Spring Boot提供shell命令来启动一个集成shell。如果使用WINDOWS,那么使用以下命令启动集成shell。

spring shell

现在我们可以直接运行命令而不使用spring关键字,如

$ version
$ test hello.groovy tests.groovy
$ run hello.groovy

找到打印界面。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/921863
推荐阅读
相关标签
  

闽ICP备14008679号