baeldung 2025-02-20
1. 简介
Spring Boot CLI 是一个命令行工具,允许我们轻松运行以 Groovy 脚本形式编写的 Spring 微服务。它还为这些微服务提供了简化且增强的依赖管理功能。
本文将快速介绍如何配置 Spring Boot CLI,并通过简单的终端命令来运行预配置的微服务。
本文使用的是 Spring Boot CLI 2.0.0.RELEASE 版本。最新版本的 Spring Boot CLI 可在 Maven Central 上找到。
2. 安装 Spring Boot CLI
安装 Spring Boot CLI 最简单的方法之一是使用 SDKMAN。SDKMAN 的安装说明可在此处找到:SDKMAN 官网。
安装 SDKMAN 后,运行以下命令即可自动安装并配置 Spring Boot CLI:
$ sdk install springboot
要验证是否安装成功,可运行以下命令:
$ spring --version
此外,你也可以从源码编译安装 Spring Boot CLI;Mac 用户还可以使用 Homebrew 或 MacPorts 提供的预构建包。所有安装选项请参阅 官方文档。
3. 常用终端命令
Spring Boot CLI 开箱即用地提供了一些实用的命令和功能。其中最有用的功能之一是 Spring Shell,它会自动为命令加上 spring 前缀。
要启动内嵌的 Shell,运行:
spring shell
进入 Shell 后,可以直接输入命令,无需再加 spring 前缀(因为此时已处于 Spring Shell 环境中)。
例如,可以输入以下命令查看当前 CLI 的版本:
version
最重要的命令之一是让 Spring Boot CLI 运行一个 Groovy 脚本:
run [SCRIPT_NAME].groovy
Spring Boot CLI 会自动推断所需的依赖项(或根据脚本中提供的注解进行推断),然后启动一个内嵌的 Web 容器并运行应用。
接下来,我们将更详细地了解如何在 Spring Boot CLI 中使用 Groovy 脚本!
4. 核心 Groovy 脚本
Groovy 与 Spring 结合,通过 Spring Boot CLI 可以快速编写出功能强大、性能良好的微服务,并以单文件 Groovy 脚本的形式部署。
注意:多脚本应用程序通常需要额外的构建工具,如 Maven 或 Gradle。
下面我们将介绍 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 参数列表(每个参数对应一个要下载和导入的库)可在此处查看:Spring Boot CLI 依赖列表。
4.2. @Controller、@RestController 和 @EnableWebMvc
为了进一步加快部署速度,我们还可以利用 Spring Boot CLI 提供的“grab hints”(抓取提示)机制,自动推断并导入正确的依赖。
以下是一些最常见的用例。
例如,我们可以使用熟悉的 @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
要在应用中添加 Spring Security 功能,可以使用 @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
即使不显式使用 @Grab 注解,也可以直接指定持久化数据相关的组件,如 DataSource 或 JdbcTemplate:
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 配置微服务主要有两种方式:
- 在终端命令中添加参数
- 使用自定义的 YAML 文件提供应用配置
Spring Boot 会自动在 /config 目录下查找 application.yml 或 application.properties 文件:
├── app
├── app.groovy
├── config
├── application.yml
...
也可以采用如下结构:
├── app
├── example.groovy
├── example.yml
...
完整的应用属性列表请参阅 Spring 官方文档。
6. 结语
以上就是 Spring Boot CLI 的快速入门指南!如需了解更多详情,请查阅 官方文档。