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

Grails 2.4.3搭配MySQL 8.0.36运行时出现SpringLoadedPreProcessor异常求助

Grails 2.4.3搭配MySQL 8.0.36运行时出现SpringLoadedPreProcessor异常求助

问题描述

我正在尝试运行Grails 2.4.3项目并搭配MySQL 8.0.36,已经更新了驱动类和MySQL连接器配置:

  • 驱动类:driverClassName = "com.mysql.cj.jdbc.Driver"
  • 依赖配置:runtime 'mysql:mysql-connector-java:8.0.22'

但运行时遇到以下错误:

| Error 2024-02-19 14:37:19,993 [localhost-startStop-1] ERROR agent.SpringLoadedPreProcessor - Unexpected problem transforming call sites
Message: Unexpected problem processing bytes for class
Line | Method
->> 760 | defineClass in java.lang.ClassLoader


| 142 | defineClass in java.security.SecureClassLoader
| 455 | defineClass in java.net.URLClassLoader
| 73 | access$100 in ''
| 367 | run . . . . in java.net.URLClassLoader$1
| 361 | run in ''
| 360 | findClass . in java.net.URLClassLoader
| 424 | loadClass in java.lang.ClassLoader
| 98 | . in com.mysql.cj.jdbc.NonRegisteringDriver
| 344 | forName in java.lang.Class
| 266 | run . . . . in java.util.concurrent.FutureTask
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
Caused by IllegalStateException: Entry: 52 18

我试过更换不同版本的SpringLoaded和MySQL连接器,但问题依然存在,有没有人遇到过类似的问题?


可能的解决方案

我之前帮朋友排查过老Grails版本适配新MySQL的类似问题,给你几个可行的方向试试:

  • 指定兼容的SpringLoaded版本
    Grails 2.4.3默认的SpringLoaded版本可能对MySQL 8的新驱动类兼容性不好,建议在BuildConfig.groovy里明确指定一个更稳定的版本,比如:

    build ':springloaded:1.2.8.RELEASE'
    

    这个版本对Java 8和新JDBC驱动的兼容性会好一些。

  • 完善MySQL JDBC URL参数
    MySQL 8要求必须指定时区,而且默认的认证方式(caching_sha2_password)和老版本Grails的兼容性差,建议把URL配置成这样:

    url = "jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&useLegacyDatetimeCode=false"
    

    其中serverTimezone是必填项,allowPublicKeyRetrieval能解决新认证方式的连接问题,useLegacyDatetimeCode=false可以避免日期类型的兼容问题。

  • 调整MySQL连接器版本
    太新的连接器版本可能和Grails 2.4.3的依赖冲突,建议换成8.0.28这个相对稳定的版本,同时排除Grails自带的旧MySQL驱动,避免依赖冲突:

    runtime('mysql:mysql-connector-java:8.0.28') {
        exclude group: 'org.grails.plugins', name: 'mysql'
    }
    
  • 确保Java版本兼容性
    Grails 2.4.3最高只支持Java 8,不要用Java 9及以上版本,否则会出现各种类加载和字节码转换的异常,这很可能是你遇到的SpringLoaded错误的根源之一。

  • 清理项目缓存
    老Grails项目的缓存很容易导致奇怪的问题,建议删除以下目录后重新构建:

    • 项目根目录下的.grails和target文件夹
    • 用户目录下的~/.grails缓存文件夹
      然后依次执行grails clean和grails run-app。

备注:内容来源于stack exchange,提问作者r.bx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:59:52