欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题

Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题

2025/3/29 3:43:05 来源:https://blog.csdn.net/qq_65597930/article/details/144769850  浏览:    关键词:Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题

问题:
        java.lang.ClassCastException: class         cn.best.scholarflow.framework.system.domain.entity.SysUser cannot be cast to class cn.best.scholarflow.framework.system.domain.entity.SysUser (cn.best.scholarflow.framework.system.domain.entity.SysUser is in unnamed module of loader 'app'; cn.best.scholarflow.framework.system.domain.entity.SysUser is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @79752146)
        截图无法显示全部的错误

        先说一说遇到的什么问题

        你遇到的问题是由于Spring Boot的开发工具(DevTools)模块中的热更新特性导致的。当你在开发环境中启用了spring-boot-devtools,它会创建一个额外的类加载器来支持热部署功能,这允许你在不重启整个应用程序的情况下重新加载更改过的类和资源。然而,这种机制有时会导致类加载问题,比如你遇到的ClassCastException异常。 

错误原因

        这个问题的根本原因是RestartClassLoader和应用程序默认类加载器之间的冲突。当你的应用运行时,RestartClassLoader用于加载一些特定的类,而其他类则由默认的应用程序类加载器加载。如果这两个类加载器都加载了同一个类(例如SysUser),即使它们来自相同的包路径,Java也会认为它们是不同的类型,因为每个类加载器加载的类被视为独立的实体。因此,尝试将一个类转换为另一个会导致ClassCastException

解决方案

        为了防止此类问题的发生,你可以通过禁用spring-boot-devtools的自动重启功能来解决问题。具体步骤如下:

打开IDEA:启动IntelliJ IDEA并打开你的项目。

编辑配置:点击顶部菜单栏的Run,然后选择Edit Configurations...

修改选项:在弹出的窗口中,选择你正在使用的运行配置,然后点击左下角的Modify options按钮。

添加VM选项:在弹出的子菜单中找到Add VM options,点击它。

输入禁用命令:在出现的文本框中输入以下内容以禁用自动重启

-Dspring.devtools.restart.enabled=false

  1. 应用设置:完成上述设置后,点击Apply按钮保存更改,然后点击OK关闭窗口。

        通过以上设置,spring-boot-devtools的热更新特性将被禁用,从而避免了因类加载器冲突而导致的ClassCastException。不过,请注意,禁用此功能后,代码更改将不再自动触发应用重启,你需要手动重启应用以查看更改效果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词