1. 简介

Spring Boot CLI 是一个命令行抽象工具,允许我们轻松运行以 Groovy 脚本形式编写的 Spring 微服务。它还提供了简化且增强的依赖管理功能。

本文将快速介绍如何配置 Spring Boot CLI 并执行简单的终端命令来运行预配置的微服务

本文使用 Spring Boot CLI 2.0.0.RELEASE 版本。最新版本可在 Maven Central 获取。

2. 安装 Spring Boot CLI

最简单的安装方式是使用 SDKMAN。SDKMAN 的安装说明见此处

安装 SDKMAN 后,运行以下命令自动安装配置 Spring Boot CLI:

$ sdk install springboot

验证安装:

$ spring --version

也可通过源码编译安装,Mac 用户可使用 HomebrewMacPorts 的预构建包。所有安装选项详见官方文档

3. 常用终端命令

Spring Boot CLI 开箱即用提供多个实用命令。最实用的功能是 Spring Shell,它封装了带 spring 前缀的命令。

启动嵌入式 shell:

spring shell

进入 shell 后可直接输入命令(无需 spring 前缀)。例如查看当前版本:

version

最核心的命令是运行 Groovy 脚本:

run [SCRIPT_NAME].groovy

Spring Boot CLI 会自动推断依赖(或根据注解正确指定),然后启动嵌入式 Web 容器和应用。

下面深入探讨如何结合 Groovy 脚本使用 Spring Boot CLI!

4. 核心 Groovy 脚本

Groovy 与 Spring 通过 Spring Boot CLI 结合,允许在单文件 Groovy 部署中快速编写高性能微服务

多脚本应用通常需要额外构建工具(如 MavenGradle)。

下面介绍 Spring Boot CLI 的常见用例,复杂配置留待后续文章。所有 Spring 支持的 Groovy 注解见官方文档

4.1. @Grab

@Grab 注解和 Groovy 的类 Java import 语句简化了依赖管理和注入

大多数注解会自动包含必要的导入语句,让我们更专注于架构和业务逻辑。

使用 @Grab 示例:

package org.test

@Grab("spring-boot-starter-actuator")

@RestController
class ExampleRestController{
  //...
}

spring-boot-starter-actuator 预配置了监控功能,无需自定义应用属性、XML 或其他程序化配置(必要时仍可指定)。

完整的 @Grab 参数列表见此处

4.2. @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!";
    }
}

Spring Boot CLI 支持 Spring Boot 的所有默认配置,因此 Groovy 应用会自动从默认位置加载静态资源。

4.3. @EnableWebSecurity

添加安全功能时使用 @EnableWebSecurity 注解,Spring Boot CLI 会自动下载相关依赖。

以下示例通过 spring-boot-starter-security(底层使用 @EnableWebSecurity)简化配置:

package bael.security

@Grab("spring-boot-starter-security")

@RestController
class SampleController {

    @RequestMapping("/")
    public def example() {
        [message: "Hello World!"]
    }
}

⚠️ 资源保护和安全处理细节见官方文档

4.4. @Test

设置 JUnit 测试时添加 @Grab('junit')@Test 注解:

package bael.test

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

即可轻松执行 JUnit 测试。

4.5. DataSource 和 JdbcTemplate

持久化数据选项(如 DataSourceJdbcTemplate)**无需显式使用 @Grab**:

package bael.data

@Grab('h2')
@Configuration
@EnableWebMvc
@ComponentScan('bael.data')
class DataConfig {

    @Bean
    DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
          .setType(EmbeddedDatabaseType.H2).build();
    }

}

仅通过熟悉的 Spring Bean 配置,就自动引入了 H2 嵌入式数据库并设置为 DataSource

5. 自定义配置

通过 Spring Boot CLI 配置微服务有两种方式:

  1. 终端命令添加参数
  2. 使用自定义 YAML 文件

Spring Boot 会自动在 /config 目录下查找 application.ymlapplication.properties

├── app
    ├── app.groovy
    ├── config
        ├── application.yml
    ...

也可直接使用同名配置文件:

├── app
    ├── example.groovy
    ├── example.yml
    ...

完整的应用属性列表见 Spring 官方文档

6. 总结

以上是 Spring Boot CLI 的快速入门指南。更多细节请参考官方文档


原始标题:Introduction to Spring Boot CLI | Baeldung