一、为啥非得整 Spring Boot CLI?你问对人了!
兄弟你可能疑惑,Spring Boot 不是好好的吗?为啥还得扯个 CLI(命令行工具)出来,图啥?我直接给你整明白:
说句人话哈:CLI 就是你写 demo、测想法、干临时活儿时候的“快枪手”,谁用谁知道,比起你那慢吞吞建项目的流程,它就像——捡了个现成饭盒直接开吃。
CLI 是啥玩意,咱整明白
说白了,Spring Boot CLI 就是一套命令行工具,帮你写 Spring Boot 项目快一点,不用写配置、不用写 Maven、直接 run 代码那种快。
只要你能整明白下面这套玩法,你就能:
- 写 demo 分分钟启动
- 学习 Spring Boot 不求人
- 做技术分享懒得建项目直接一把梭
- 再不济,整人吧,在终端吓唬吓唬实习生也行...
二、装它:安装 Spring Boot CLI(废话多点,不然不像咱说的)
说起安装这个玩意,真是个坑头,这年头连个 CLI 工具都能把人搞冒烟,我最开始也是一顿乱敲,好家伙,敲完还以为是我网卡了...
1. 用 SDKMAN 装(推荐,像话)
这玩意就像 Java 工具界的“包工头”,谁都能给你整一套。
安装 SDKMAN:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
你要问这是干啥的?咱直白点说:这是在你机器里埋颗“雷”,让它帮你自动拉 CLI 的活儿。
安装 Spring Boot CLI:
sdk install springboot
完事你试下:
spring --version
如果你看到个版本号蹦出来,比如:
Spring Boot v3.2.5
那就说明——成了,踩雷成功!
三、验证:Hello CLI!(上代码!别说我懒)
这块就来点狠的,咱直接写个“Hello Spring Boot CLI”,终端跑起来。
建个文件,随便命个名,比如 hello.groovy
:
@RestController // Spring 的注解:标明这是个 Rest 控制器
class HelloController {
@RequestMapping("/") // 请求路径:根目录
String hello() {
return "春哥好,Boot CLI 我来了!"
}
}
然后命令行跑它:
spring run hello.groovy
就这么一个命令!对,就一行,你那复杂的 Boot 项目那堆配置,在 CLI 里就是个屁。
你打开浏览器,访问:
http://localhost:8080/
能看到:
春哥好,Boot CLI 我来了!
说明你这 CLI 跑起来了!是不是有点意思了?
四、CLI 也能跑多文件?别不信,真能整!
有一说一啊,刚开始我也以为 CLI 就只能跑一个 groovy
文件,后来看了官方文档我直接一个大写的“服”字——
一句话总结:
CLI 不光能跑多个
.groovy
文件,还能像你熟的Controller + Service + Model
分层那样跑起来!
来,整一套小 demo,模拟个小业务:用户登录
文件1:User.groovy
class User {
String username
String password
}
👆 这就是咱的模型类,别嫌简单,CLI 项目就图快,不图全。
文件2:UserService.groovy
@Service // Spring 注解,表示这是个服务类
class UserService {
boolean login(User user) {
// 模拟下业务逻辑
return user.username == "admin" && user.password == "123456"
}
}
👆 这玩意就是干活的,检查用户名密码,逻辑简单但架子得有。
文件3:LoginController.groovy
@RestController
class LoginController {
@Autowired
UserService userService
@PostMapping("/login")
String login(@RequestBody User user) {
if (userService.login(user)) {
return "登录成功,进来坐会儿~"
}
return "登录失败,账号密码瞅准点输!"
}
}
👆 控制器来了,和你平时用的 Spring Boot 项目一毛一样。
怎么跑?直接撸:
spring run User.groovy UserService.groovy LoginController.groovy
你看,是不是连构建都不用了?IDEA 都不用打开,直接终端开干!
测试接口(用 curl 模拟 POST 请求):
curl -X POST http://localhost:8080/login
-H "Content-Type: application/json"
-d '{"username":"admin","password":"123456"}'
返回啥?
登录成功,进来坐会儿~
你要是改成错的账号密码,提示就变:
登录失败,账号密码瞅准点输!
看到没?CLI 虽说是个命令行工具,架不住它 Spring 那一整套注解照样都认,@RestController
、@Service
、@Autowired
通通生效!
CLI 跑小项目,真就跟玩一样,适合做演示、讲课、写 demo,再合适不过!
五、CLI 引入外部依赖?没错,CLI 也能像 Maven 那样搞!
你要是以为 CLI 就只能跑“本地那一丢丢小文件”,那就大错特错了,Spring Boot CLI 支持自动拉 Spring Boot Starters 和第三方 jar 包,关键它还能走 Groovy 的 Grape 机制,懂行的都知道这玩意灵。
来,咱搞个最经典的:接个 RestTemplate,用 CLI 请求第三方 API
你没听错,不用建 Maven 项目,不用配置 pom,CLI 直接就能拉!
HttpClientDemo.groovy
@Grab('org.springframework.boot:spring-boot-starter-web') // 拉 Spring Boot Web 包
@RestController
class HttpClientDemo {
@GetMapping("/weather")
String getWeather() {
// 创建 RestTemplate 对象
RestTemplate restTemplate = new RestTemplate()
// 请求一个天气接口(这玩意是随便找的免费 API)
String url = "https://api.uomg.com/api/rand.qinghua?format=json"
// 发 GET 请求
def result = restTemplate.getForObject(url, String)
// 返回结果
return "查完了,结果如下:n" + result
}
}
重点来了兄弟,这里有几个“骚点”你得记住:
@Grab(...)
是 Groovy 的神器,能在运行时自动下载依赖包- 你 CLI 项目可以没 pom,但照样能拉 Spring Boot 的 Starter
RestTemplate
、WebMvc
、Jackson
你都能直接用,CLI 直接内置!
启动方式:
spring run HttpClientDemo.groovy
打开浏览器访问:
http://localhost:8080/weather
你会看到:
查完了,结果如下:
{"content":"我想变成一棵树,长在你必经的路上。","from":"网易云热评墙"}
看到没?这不是“土味情话 API”嘛,咱拿来打 demo 再合适不过,边学边乐~
总结下这节你得会的:
- 用
@Grab
加载第三方库(Spring Boot Starter / 外部依赖都行) - 用
RestTemplate
发 HTTP 请求,跑起来就是香 - CLI 项目一样能用注解、注入、Starter,轻量不代表“弱鸡”
六、CLI 也能整定时任务?Spring 家族都传承下来了!
你没听错,@Scheduled
也能用在 CLI 项目里,照样起飞——重点是:你只要加上定时注解,CLI 一样帮你自动注册调度任务!
场景模拟:每5秒报一次“系统心跳”,模拟健康检查
别笑,这玩意我真在测试环境跑过,用来模拟“设备在线状态上报”,效果嘎嘎好用!
SchedulerDemo.groovy
@Grab('org.springframework.boot:spring-boot-starter') // 基础 Starter 包,调度、日志这些全靠它
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
@Component // 标记为 Spring Bean
class HeartbeatReporter {
// 定时任务注解,5秒跑一次
@Scheduled(fixedRate = 5000)
void report() {
def now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
println "[系统心跳] 当前时间:${now} —— 我还活着呢兄弟~"
}
}
@Configuration
@EnableScheduling // 重点:启用定时任务功能
class SchedulerConfig {}
解释一哈这些东西干嘛用:
元素 | 用法 |
---|---|
@Scheduled(fixedRate = 5000) |
每 5000 毫秒执行一次,别整错成 cron |
@EnableScheduling |
激活调度功能,不然任务不跑 |
@Component |
定义成 Spring 管理的 Bean |
@Grab(...) |
拉依赖,CLI 没有 pom 全靠它 |
启动 CLI 项目:
spring run SchedulerDemo.groovy
你终端每隔 5 秒就能看到类似:
[系统心跳] 当前时间:2025-05-23 13:14:00 —— 我还活着呢兄弟~
[系统心跳] 当前时间:2025-05-23 13:14:05 —— 我还活着呢兄弟~
[系统心跳] 当前时间:2025-05-23 13:14:10 —— 我还活着呢兄弟~
看着就带劲,一种“活系统”的感觉!
小彩蛋一嘴:还能配 cron
表达式,比如:
@Scheduled(cron = "0 0/1 * * * ?") // 每分钟整点跑一次
但 CLI 项目里建议还是用 fixedRate
、fixedDelay
简洁点,别太重。
七、WebSocket 聊天室,用 CLI 照样整!
想象一下场景:
- 有人访问网页就能接收消息
- CLI 后台主动推送消息给客户端
- 没有 Controller、没有复杂前后端分离,直接“中老年人版”聊天室上线
技术目标:
- 用 Spring WebSocket + CLI 建一个能收发消息的服务端
- 不依赖 HTML 页面,直接命令行 curl 模拟客户端收发
第一步:引依赖,用 @Grab
@Grab('org.springframework.boot:spring-boot-starter-websocket')
@Grab('org.springframework.boot:spring-boot-starter-web')
第二步:写个配置类,启动 WebSocket 支持
@Configuration
@EnableWebSocket
class WebSocketConfig implements WebSocketConfigurer {
@Override
void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MySocketHandler(), "/ws")
}
}
第三步:自定义 Handler,接收 & 回复消息
class MySocketHandler implements WebSocketHandler {
@Override
void afterConnectionEstablished(WebSocketSession session) {
println "有客户端连接啦: ${session.id}"
session.sendMessage(new TextMessage("欢迎欢迎,热烈欢迎~~"))
}
@Override
void handleMessage(WebSocketSession session, WebSocketMessage<?> message) {
def content = message.getPayload()
println "收到消息: ${content}"
// 简单回传
session.sendMessage(new TextMessage("服务端收到了:${content}"))
}
@Override
void handleTransportError(WebSocketSession session, Throwable exception) {
println "传输出错:${exception.message}"
}
@Override
void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
println "客户端断开连接:${session.id}"
}
@Override
boolean supportsPartialMessages() {
return false
}
}
启动命令:
spring run WebSocketDemo.groovy
用 WebSocket 客户端工具连接测试:
- 地址:
ws://localhost:8080/ws
- 发送任何消息,CLI 会原样返回
- 控制台会输出消息日志,你说它不香?
顺手推荐两个测试工具:
- Chrome 插件:Simple WebSocket Client
- Postman 也可以发 WS 请求,支持收发
终极总结:CLI 不只是玩票,它是真能干活!
兄弟,咱从第一个 Hello World,到现在整到 WebSocket,全程 CLI 写的,你说这玩意到底能不能上手干项目?
我来给你复盘一下,咱一共整了这几招:
✅ Hello Controller 快速启动(开篇小试牛刀)
.groovy
文件直接写注解跑 Web 项目spring run hello.groovy
秒起服务,适合快速试验逻辑
✅ 多文件组合跑,整出 Controller + Service + Model
- 分文件模拟标准分层架构
- 一把梭把整个“小系统”跑起来,不比传统 Spring Boot 差
✅ @Grab
引入外部依赖,整合 RestTemplate
- CLI 不靠 Maven 也能拉 Starter,干净、快
- RestTemplate 拉 API 像玩一样,适合做 API 调用演示
✅ @Scheduled
弄定时任务,后台定期执行逻辑
- CLI 支持全套注解调度
- 每几秒打印日志模拟系统心跳,测试后台逻辑的利器
✅ WebSocket 聊天室,CLI 搞实时通信也不虚
- CLI 项目也能起 WS 服务
- 接收消息、推送消息一条龙搞定
干货小建议:
你还在打开 IDEA 费半天劲建项目,建完又不想写?
那说明你该试试 Spring Boot CLI 啦!
CLI 虽然轻、简单、没那么多“花架子”,但它能干的事儿可真不少:
- 快速验证代码逻辑
- API 接口调试
- 技术演示 & 讲课
- Shell 脚本集成自动化服务
- 测试环境 demo 快速部署
要我说,Spring Boot CLI 是你桌边小刀,不是万能,但谁用谁真香。