You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Spring Shell热重载输入读取异常问题求助

解决方案:Spring Shell热重载后输入命令异常问题

核心原因

Spring Boot DevTools的类加载器机制与Spring Shell的输入解析组件存在冲突,热重载后类加载器切换导致输入处理逻辑出现异常,结合Java 21环境的特性,进一步放大了兼容性问题。

修复步骤

1. 排除Spring Shell类参与DevTools重启

在项目src/main/resources/META-INF目录下创建spring-devtools.properties文件,添加以下配置:

restart.exclude.spring-shell=org.springframework.shell:**

该配置让DevTools在重启时不重新加载Spring Shell相关类,避免类加载器不一致引发的输入解析错乱。

2. 切换DevTools重启触发方式

禁用自动重启,改用手动触发:
在application.properties中添加:

spring.devtools.restart.enabled=false

后续需要热重载时,手动执行IDE的「Build Project」操作,避免自动构建频繁触发重启干扰Shell输入线程。

3. 确认依赖版本兼容性

确保Spring Boot和Spring Shell版本完全支持Java 21:

  • Spring Boot版本需≥3.2.0
  • Spring Shell版本需≥3.2.0
    检查build.gradle中的依赖配置示例:
plugins {
    id 'org.springframework.boot' version '3.2.5'
    id 'io.spring.dependency-management' version '1.1.4'
    id 'java'
}

dependencies {
    implementation 'org.springframework.shell:spring-shell-starter'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
}

4. 调整IDE编译设置

在IntelliJ IDEA中关闭「自动构建项目」,开启「Compile on save」:

  • 打开Settings -> Build, Execution, Deployment -> Compiler
  • 取消勾选「Build project automatically」
  • 勾选「Compile on save」(需确保项目已正确导入为Gradle项目)

内容的提问来源于stack exchange,提问作者Jan Dzickovski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:25:59