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 模板,异常即可解决。

相关推荐
懂点Tech1 天前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate1 天前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang1 天前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠1 天前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试1 天前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
万化冥合1 天前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
车软学堂1 天前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
天空依然蔚蓝1 天前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
岁月宁静1 天前
一个 AI 项目从本地到上线,要经过哪些步骤?全流程讲清楚
python·docker·agent
codists1 天前
《crafting interpreters》阅读笔记:p45-p45
python