mybatis 启动报错 分析

Spring框架与Mybatis框架整合启动报错Property 'dataSource' threw exception; nested exception is java.lang.NoCla 一、报错详细信息 java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcce... 阅读详情

问题背景:

nacos 注册服务中心,在新的配置分组(crm)启动了一个微服务
默认分组启动正常,通过打断点发现: 1.新的分组crm启动的报错点,在默认分组启动的时候 并未执行

也就是 默认分组启动不会走

initNodeHandlerMap() 方法

mybatis 启动报错信息

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\IdeaProject\wk_crm_c_backend\c-crm\target\classes\mapper\xml\CallRecordMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Unknown element <for> in SQL statement.
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94)
	at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593)
	... 70 common frames omitted
Caused by: org.apache.ibatis.builder.BuilderException: Unknown element <for> in SQL statement.
	at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseDynamicTags(XMLScriptBuilder.java:95)
	at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseScriptNode(XMLScriptBuilder.java:67)
	at org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.createSqlSource(XMLLanguageDriver.java:44)
	at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:96)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:137)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:130)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
	... 72 common frames omitted

分析 代码

 private void initNodeHandlerMap() {
    nodeHandlerMap.put("trim", new TrimHandler());
    nodeHandlerMap.put("where", new WhereHandler());
    nodeHandlerMap.put("set", new SetHandler());
    nodeHandlerMap.put("foreach", new ForEachHandler());
    nodeHandlerMap.put("if", new IfHandler());
    nodeHandlerMap.put("choose", new ChooseHandler());
    nodeHandlerMap.put("when", new IfHandler());
    nodeHandlerMap.put("otherwise", new OtherwiseHandler());
    nodeHandlerMap.put("bind", new BindHandler());
  }

XMLScriptBuilder 初始化的时候 map 中没有初始化for 标签

但是 for标签在mybatis 是生效的,

简单的笨方法 : 把 for 标签 全部替换为 foreach

接着 分析下为什么会遇到这样的问题
首先参考总资料 https://www.cnblogs.com/linjisong/p/6039949.html
发现 了

单个SqlMapper.xml文件的解析入口是SqlSessionFactoryBean的doParseSqlMapperResource()方法,在这个方法中,自动侦测是DTD还是XSD,然后分两条并行路线分别解析:

1、DTD模式:创建XMLMapperBuilder对象进行解析

2、XSD模式:根据ini配置文件,找到sqlmapper命名空间的处理器SchemaSqlMapperNamespaceParser,该解析器将具体的解析工作委托给SchemaSqlMapperParserDelegate类。

进一步查找资料:

发现mybatis 支持 自定义节点,

参考资料:https://juejin.cn/post/6854573216359415822

但是这个微服务并没有这样的逻辑。

总结

问题发生的根源还是在于nacos 配置文件的差异 ,导致了服务启动的时候数据源初始化逻辑不同,进而导致mybatis 的标签报错

确认配置信息

mybatis-plus:
  configuration:
    default-scripting-language: com.vd.canary.core.crm.mybatis.MybatisXMLDriver
    call-setters-on-nulls: true
  mapper-locations: classpath:/mapper/xml/*.xml

default-scripting-language: 配置问题

【已解决】SpringBoot3项目整合Mybatis-plus启动项目报错:Invalid bean definition with name ‘xxxMapper‘ defined in flle 但是还有一些情况很特殊,即 SpringBoot的版本与MyBatis-Plus 的版本不兼容,也会导致SpringBoot无法扫描到所定义的mapper。显然地,SpringBoot 版本与MyBatis-Plus依赖的版本不兼容!确认无误后 ,根据上述原因分析, 阅读详情

相关推荐

iPhone存储空间耗尽自救指南:从“白苹果”死锁到成功保数据刷机

本文详细介绍了iPhone存储空间耗尽导致'白苹果'死锁的解决方案,通过保留数据刷机方法成功恢复设备运行。文章分享了从失败尝试到最终成功的完整流程,包括关键操作步骤和预防措施,帮助用户在紧急情况下保住重要数据。

weixin_32578161的博客 288

SQL中行为不当的子查询,IN,exists

SQL中行为不当的子查询IN使用的是三值逻辑(True,False,Unknown),并且用not运算符否定unknown,得到的仍是unknown,而unknown在查询过滤语句时会补过滤掉exists使用的是二值谓词逻辑,总是返回True,False,而绝不会返回unknown.  以下是不当的子查询:select custid,companynamefrom

brian0031的专栏 693

别再手动配电脑了!手把手教你用Windows Server 2022搭建企业AD域(附DNS配置避坑指南)

本文详细介绍了如何使用Windows Server 2022搭建企业AD域,提升20+终端的管理效率。通过实战案例和避坑指南,解析AD域的核心价值、部署步骤及DNS配置技巧,帮助企业实现集中权限管理、安全策略统一部署,显著降低IT运维成本。

weixin_30652897的博客 349

解决Abp设置DefaultLanguage默认语言不生效的问题

默认地,Abp的语言提供程序将返回的CultureInfo为En,在一些默认实现的接口(比如/api/TokenAuth/Authenticate)返回的错误信息是英文。当请求到来时,会按照顺序依次调用这些语言提供程序,直到有语言提供程序的规则命中并返回了CultureInfo,这个CultureInfo就会被用于当前请求的语言设置。因此我们需要把AbpSettings中获取默认语言设置的优先级提高,即将AbpDefaultRequestCultureProvider排在默认的提供程序之前。

jevonsflash的专栏 1352

GraphRAG + Ollama 本地化部署实战:从零搭建知识图谱问答系统

本文详细介绍了如何在本地部署GraphRAG与Ollama,搭建一个完全自主可控的知识图谱问答系统。通过逐步指导环境配置、项目初始化、核心设置修改以及源码适配,成功将GraphRAG从依赖云端OpenAI API转向本地Ollama服务,并选用qwen2.5:7b和nomic-embed-text模型。该方案有效解决了数据隐私与持续API成本问题,特别适合中小企业构建内部知识库或智能客服系统。

x2y3z4a5b的博客 918

英伟达 Jetson AGX Thor 官方入门教程(一)系统U盘安装

NVIDIA Jetson AGX Thor开发套件快速安装指南 本指南详细介绍了NVIDIA Jetson AGX Thor开发套件的安装流程。该套件搭载T5000 SoM,为物理AI和机器人应用提供强大支持。安装过程采用全新的JetPack 7.0方案,通过USB闪存盘即可完成BSP(Jetson Linux)安装,无需依赖Ubuntu主机。指南包含硬件开箱说明、两种配置模式(带显示器/无显示器)、详细的ISO镜像下载和USB制作步骤(推荐使用Balena Etcher工具),以及首次启动后的初始设置流

机器人控制与仿真应用 2867

mybatis无法解析mapper里的注释的错误原因

我在用MyBatisGenerator反向生成Mapper.xml的时候,测试得到如下异常: Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in com/sf/sk/dao...

眼中的JAVA世界 2751

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3790

异常java.lang.NoSuchMethodError: org.apache.ibatis.session.Configuration.getDefaultScriptingLanguageIn

报错异常java.lang.NoSuchMethodError:org.apache.ibatis.session.Configuration.getDefaultScriptingLanguageInstance() Lorg/apache/ibatis/scripting/LanguageDriver 依赖中mybatis请改到3.4.2或者以上版本

qq_36632604的博客 5812

浏览器解析HTML的过程及编程实现

需要注意的是,上述示例代码只是简化的演示,并未涵盖浏览器解析HTML的所有细节和复杂性。实际上,浏览器的HTML解析引擎还会处理一系列的特殊情况、错误容错和性能优化等方面的内容,以确保能够正确解析各种类型的HTML代码。HTML(超文本标记语言)是构建网页的基础语言,浏览器负责将HTML代码解析并渲染成可视化的网页。本文将详细介绍浏览器解析HTML的过程,并提供相应的编程示例代码。希望以上内容能帮助您理解浏览器解析HTML的过程,并通过提供的示例代码更好地了解如何在编程中实现这一过程。

ByteJolt的博客 321

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

对于C51单片机的设计思路,你可以使用类似的步骤来实现红外解码、数码管显示和LED显示的功能。下面是一个简单的设计思路:(1) 连接HX1838红外解码器、数码管和LED到C51单片机。将HX1838的信号引脚连接到C51单片机的外部中断引脚(例如INT0),数码管的CLK引脚连接到C51单片机的某个IO口引脚,数码管的DIO引脚连接到C51单片机的另一个IO口引脚,LED连接到C51单片机的某个IO口引脚。(2) 在C51的程序中,定义并初始化所需的IO口和外部中断。

sinat_30943509的博客 2977

mybatis的动态SQL

动态 SQL 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。 如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL .

charxupengfei的博客 341

LDRA Testbed(TBrun)软件单元测试_实例讲解(对多次调用的函数打桩)

在之前的文章《LDRA Testbed(TBrun)软件单元测试_操作指南》中,已经讲解了如何使用TBrun进行软件单元测试的基本操作步骤。本篇文章将结合实例进一步讲解被测函数中包含多次调用其他函数时,如何对其打桩来实现测试目的(详细的操作流程本文不再重述,若有不清楚的,可以结合之前的操作指南一起来看)。本文以一个被测函数作为示例,讲解了如何使用Testbed(TBrun)对涉及到多次调用其他函数的被测函数进行单元测试。本文的示例可能比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1462

SpringBoot3使用MyBatisPlus遇到的问题

最近在使用mybatis-plus时发现使用mybatis就可以完美启动项目使用mybatisplus时就报错org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'userMapper' defined in file [D:\Activation\Spring按照mybatisPlus官方说法“是一个。

m0_61786208的博客 840

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringBoot整合MyBatis-Plus启动报错问题及解答:解决启动难题,提升开发效率

SpringBoot整合MyBatis-Plus启动报错问题及解答:解决启动难题,提升开发效率 【下载地址】SpringBoot整合MyBatis-Plus启动报错问题及解答 Spring Boot整合MyBatis-Plus时,启动报错困扰了许多开发者。本文档针对常见的启动失败问题,提供了详细的解决方案,帮助开发者快速...

gitblog_06782的博客 927

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MapperScan导致的启动报错

SpringBoot 整合mybatis,启动报错 1.报错信息 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.stoneppy.ec.service.LoginService.getPassword at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) at

qq_37916752的博客 2345

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【已解决】SpringBoot 整合 Spring Data Elasticsearch 启动报错 Bean 冲突

SpringBoot 整合 Spring Data Elasticsearch 启动报错 Bean 冲突

韶君的博客 843

MyBatis-Plus集成PaginationInnerInterceptor报错问题分析与解决

MyBatis-Plus集成PaginationInnerInterceptor报错问题分析与解决 【免费下载链接】mybatis-plus mybatis 增强工具包,简化 CRUD 操作。 文档 http://baomidou.com 低代码组件库 http://aizuda.com ...

gitblog_01420的博客 806

SpringBoot启动报错“org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bea”

spring boot 启动报错解决方案 报错信息: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'accCouponApi': Unsatisfied dependency expressed through field 'couponServi...

SELECT_BIN的博客 7万+

由于pagehelper和mybatisplus-core中分页插件版本冲突导致mybatisplus启动报错

由于pagehelper和mybatisplus-core中分页插件版本冲突导致mybatisplus启动报错

asdfggfdsa121的博客 903

springboot 启动报错Field XXX required a bean of type XXX that could not be found.

今天自己搭建springboot项目,连接数据库,启动的时候发现报错,如下: Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-06-08 14:28:58.065 ERROR 4656 --- [     ...

淮水竹亭 1090

MyBatis-Plus 中 Mapper 重载踩坑指南

前言近期在 Mapper 中写了个方法重载,然后死活查不到正确结果,最终灵机一动,想到是不是因为重载,然后我Shift + F6把重载方法名字改了一下!结果,显而易见,重载的那个方法也...

程序员小航 7368
上一篇: 研发效率破局之道-学习思考
下一篇: 一次springboot扫描范围引起的启动报错
hamish-wu
博客等级 码龄15年 2814粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值