Springboot报错Template not found For name “java/lang/Object_toString.sql

Springboot报错Template not found For name "java/lang/Object_toString.sql

java 复制代码
[ERROR][org.jeecgframework.minidao.util.FreemarkerParseFactory]Template not found for name "java/lang/Object_toString.sql".
The name was interpreted by this TemplateLoader: ClassTemplateLoader(resourceLoaderClass=org.jeecgframework.minidao.util.FreemarkerParseFactory, basePackagePath="/").
freemarker.template.TemplateNotFoundException: Template not found for name "java/lang/Object_toString.sql".
The name was interpreted by this TemplateLoader: ClassTemplateLoader(resourceLoaderClass=org.jeecgframework.minidao.util.FreemarkerParseFactory, basePackagePath="/").
	at org.jeecgframework.minidao.util.FreemarkerParseFactory.parseTemplate(FreemarkerParseFactory.java:102)
	at org.jeecgframework.minidao.aop.MiniDaoHandler.parseSqlTemplate(MiniDaoHandler.java:613)
	at org.jeecgframework.minidao.aop.MiniDaoHandler.invoke(MiniDaoHandler.java:101)
	at com.sun.proxy.$Proxy160.toString(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
	at com.sun.proxy.$Proxy161.toString(Unknown Source)
	at org.jeecgframework.web.cgreport.service.impl.core.CgReportServiceImpl.queryCgReportConfig(CgReportServiceImpl.java:38)
	at org.jeecgframework.web.cgreport.service.impl.core.CgReportServiceImpl$$FastClassBySpringCGLIB$$6d88a1b.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
	at org.jeecgframework.web.cgreport.service.impl.core.CgReportServiceImpl$$EnhancerBySpringCGLIB$$79b00731.queryCgReportConfig(<generated>)
	at org.jeecgframework.web.cgreport.controller.core.CgReportController.list(CgReportController.java:60)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.jeecgframework.core.aop.GZipFilter.doFilter(GZipFilter.java:114)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
java 复制代码
<!-- 确保版本与你的 Jeecg 核心版本完全一致,无任何偏差 --><dependency>
    <groupId>org.jeecgframework</groupId>
    <artifactId>jeecg-minidao-core</artifactId>
    <version>3.5.0</version> <!-- 与 Jeecg 父工程/核心依赖版本保持一致 -->
    <scope>compile</scope></dependency>

确认 pom.xml 中已配置 Jeecg 官方仓库(此前提供的配置),确保对应版本的依赖能正常下载。

验证 jeecg-minidao-core 包内是否包含目标模板(排除包损坏)

这一步是验证依赖是否完整的关键,直接确认模板是否存在于依赖包中:

找到本地 Maven 仓库中的 jeecg-minidao-core 目录,默认路径:C:\Users\你的用户名.m2\repository\org\jeecgframework\jeecg-minidao-core\你的版本号

找到该目录下的 jeecg-minidao-core-你的版本号.jar 文件,用解压软件(如 WinRAR、7-Zip)打开(无需解压)。

在 JAR 包内导航到 java/lang/ 目录,检查是否存在 Object_toString.sql 文件:

若存在:说明依赖包完整,问题出在类路径扫描或配置上。

若不存在:说明依赖包损坏或版本无效,删除该版本对应的整个目录,重新执行 mvn clean compile -U 强制下载完整依赖。

修正 IDE 资源配置与类路径扫描(针对开发环境)

确保 IDE 能正确识别类路径资源,且 jeecg-minidao-core 的内置资源能被扫描到:

验证 IDE 资源目录配置(IDEA 为例):

右键项目 src/main/resources 目录 → Mark Directory as → Resources Root,确保该目录被标记为资源根目录(显示为蓝色文件夹)。

打开 File → Project Structure → Modules → 你的项目模块 → Dependencies,检查 jeecg-minidao-core 依赖是否存在,且 Scope 为 Compile(无红色报错)。

排除类加载器冲突:

避免项目中自定义 ClassLoader 覆盖 MiniDao 的默认类加载器。

若项目有自定义 FreeMarker 配置,确保不覆盖 FreemarkerParseFactory 的默认模板加载逻辑,保留 ClassTemplateLoader 对类路径根目录的扫描。

刷新 IDE 缓存与依赖:

IDEA 中执行 File → Invalidate Caches... → 勾选 All Caches → 点击 Invalidate and Restart,彻底清除 IDE 缓存并重启。

强制清理并重新构建项目(排除编译与打包缓存)

命令行清理(更彻底,推荐):在项目根目录(含 pom.xml)打开命令行,执行以下命令:

java 复制代码
# 1. 清理项目编译产物与本地依赖缓存
mvn clean
# 2. 强制更新依赖并重新编译(-U 忽略本地查找失败缓存,强制从仓库重新拉取)
mvn compile -U

验证编译后类路径是否包含模板:编译完成后,查看项目 target/classes/ 目录下,是否存在 java/lang/Object_toString.sql(该文件由 jeecg-minidao-core 依赖复制到类路径中)。

若存在:说明类路径扫描正常,重新运行项目即可。

若不存在:检查 Maven 打包配置,确保依赖资源被正确复制。

补充 Maven 打包配置(针对打包后运行异常的场景)

若项目打包为 JAR/WAR 后运行出现该异常,需确保 jeecg-minidao-core 的内置资源被正确打入包中:

WAR 包项目配置:确保 pom.xml 中打包类型为 war,且无排除 WEB-INF/classes 资源的配置:

java 复制代码
<packaging>war</packaging>
<!-- 确保 maven-war-plugin 插件配置正常,不排除类路径资源 --><build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <!-- 禁用资源排除,确保类路径资源被打入 WAR 包 -->
                <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
            </configuration>
        </plugin>
    </plugins></build>

JAR 包项目配置(Jeecg Boot 常用):确保 maven-shade-plugin 或 spring-boot-maven-plugin 配置正常,能包含第三方依赖的内置资源:

java 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.18</version> <!-- 与项目 Spring Boot 版本匹配 -->
            <configuration>
                <includeAllDependencies>true</includeAllDependencies>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins></build>

重新打包项目:mvn package -U,解压打包产物验证 java/lang/Object_toString.sql 是否存在于包内的类路径中。

手动导入模板文件(备用方案,适用于依赖无法正常下载场景)

若以上步骤均无效,可手动提取模板文件并放入项目类路径中,确保模板加载器能扫描到:

从正常的 jeecg-minidao-core 包中(可从 Jeecg 官方仓库下载对应版本)提取 Object_toString.sql 文件。

在项目 src/main/resources 目录下,创建目录结构 java/lang/(与模板路径对应)。

将提取的 Object_toString.sql 放入 src/main/resources/java/lang/ 目录下。

重新编译项目,此时模板会被复制到 target/classes 类路径中,被 ClassTemplateLoader 扫描到。

额外注意事项

避免修改 MiniDao 内置模板:Object_toString.sql 是 MiniDao 用于对象解析的核心模板,手动修改内容可能引发其他解析异常。

网络与仓库验证:确保能正常访问 Jeecg 官方仓库,若有代理需在 settings.xml 中配置代理信息,避免依赖下载不完整。

排查冲突依赖:项目中若存在多个版本的 jeecg-minidao-core,需通过 mvn dependency:tree 命令排查依赖冲突,排除多余版本:

java 复制代码
# 查看依赖树,排查 jeecg-minidao-core 冲突
mvn dependency:tree | grep jeecg-minidao-core
若存在冲突,在依赖中添加 exclusions 排除多余版本:
<dependency>
    <groupId>org.jeecgframework</groupId>
    <artifactId>jeecg-minidao-core</artifactId>
    <version>3.5.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.jeecgframework</groupId>
            <artifactId>jeecg-minidao-core</artifactId>
        </exclusion>
    </exclusions></dependency>

总结

核心关键:确保 jeecg-minidao-core 版本与 Jeecg 核心版本一致,且依赖包完整(包含目标模板)。

关键操作:强制刷新 Maven 依赖、清理 IDE 缓存、验证类路径扫描是否正常。

兜底方案:手动放置模板文件到项目类路径中,确保模板加载器能识别。

按照以上步骤操作后,ClassTemplateLoader 即可正常扫描到 java/lang/Object_toString.sql 模板,异常即可解决。

相关推荐
奋进的芋圆1 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin1 小时前
设计模式之桥接模式
java·设计模式·桥接模式
Edward.W1 小时前
Python uv:新一代Python包管理工具,彻底改变开发体验
开发语言·python·uv
小熊officer1 小时前
Python字符串
开发语言·数据库·python
model20051 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
月疯2 小时前
各种信号的模拟(ECG信号、质谱图、EEG信号),方便U-net训练
开发语言·python
荒诞硬汉2 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国2 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882482 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
小鸡吃米…2 小时前
机器学习中的回归分析
人工智能·python·机器学习·回归