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

Grails 5.x类热重载异常:修改类触发全应用重启而非局部重载

Grails 5.x 热重载触发全量重启问题排查与解决

核心差异说明

Grails 5.x 基于 Spring Boot 2.x,默认采用 Spring Boot DevTools 实现热重载;而 Grails 3.x 使用的是框架自研的类重载机制,这是两者行为差异的核心原因。DevTools 在检测到类路径变化时,默认会触发应用全量重启而非局部热重载,尤其是修改核心类(比如 Spring Security 相关配置类)时,更容易触发重启。

排查与修复步骤

1. 检查 IntelliJ 配置

  • 启用 Build Project Automatically(路径:Settings -> Build, Execution, Deployment -> Compiler)
  • 勾选 Allow auto-make to start even if developed application is currently running 选项
  • 确认 Grails 运行配置中,On 'Update' action 和 On frame deactivation 均设置为 Update classes and resources

2. 优化 Spring Boot DevTools 配置

在项目的 build.gradle 中添加或调整 DevTools 参数,限定触发重启的范围:

developmentOnly("org.springframework.boot:spring-boot-devtools")

bootRun {
    jvmArgs = [ "-Dspring.devtools.restart.enabled=true",
                "-Dspring.devtools.restart.additional-exclude=static/**,public/**",
                "-Dspring.devtools.restart.exclude=views/**" ]
}

注意:exclude 参数需根据项目实际调整,不要排除需要重载的 Java/Groovy 类文件。若修改的是核心配置类(如 Spring Security 配置类),DevTools 仍会触发重启,这类修改本身就需要重启才能生效。

3. 验证 Grails 原生重载能力

尝试用 Grails 命令行启动应用(而非通过 IntelliJ 直接启动):

grails run-app

修改类后执行 grails compile,观察是否仅重载修改的类。如果命令行下行为正常,说明问题出在 IntelliJ 配置或 IDE 与 DevTools 的兼容性上。

4. 排查插件兼容性

检查 Spring Security 等插件的版本是否与 Grails 5.x 兼容,部分旧版本插件可能干扰 DevTools 的重载逻辑,确保所有插件使用 Grails 5.x 对应的最新兼容版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:10:30