问题背景:

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.MybatisXMLDrivercall-setters-on-nulls: truemapper-locations: classpath:/mapper/xml/*.xml

default-scripting-language: 配置问题

mybatis 启动报错 分析相关推荐

  1. SpringBoot+MyBatis启动报错java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal

    2019独角兽企业重金招聘Python工程师标准>>> 如题,在启动SpringBoot时报SpringBoot+MyBatis启动报错java.lang.NoClassDefFou ...

  2. mybatis启动报错Result Maps collection already contains value for xxx

    背景: mybatis配置xml启动的时候报错,提示Result Maps collection already contains value for xxx. 原因分析: 同一个xml文件里写的sq ...

  3. springboot+mybatis启动报错:No suitable driver found for xxx

    报错如下 Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connect ...

  4. 解决Mybatis启动报错: Invalid bound statement (not found)

    一.问题描述 使用mybatis的项目在本地可以正常运行,但当使用maven或Jenkins打包部署到服务器上时出现了绑定错误,异常信息为: org.apache.ibatis.binding.Bin ...

  5. Spring循环引用-@Async注解启动报错,而@Transactional则不会

    目录 一.问题描述 二.问题分析 1.代理类 2.代理过程 三.结论 上接<Spring循环引用-@Async注解启动报错分析> 一.问题描述 Bean1Service注解@Async 启 ...

  6. 启动报错:Caused by: org.apache.ibatis.binding.BindingException汇总解决

    报错 Springboot启动时从nacos拉取配置.启动报错: Caused by: org.apache.ibatis.binding.BindingException: Invalid boun ...

  7. oracle log block size,案例:Oracle无法启动报错ORA-00218: block size 0 重建控制文件

    天萃荷净 oracle数据库无法启动报错ORA-00218故障,通过重建控制文件解决文件损坏问题 遇到一个案例在数据库启动的时候报ORA-00218错误,而这个故障的引起原因是因为重建控制文件的时候, ...

  8. mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...

    原标题:RTSP视频平台EasyNVR使用mysql数据源启动报错unknow driver"mysql"优化 我们上一篇讲了TSINGSEE青犀视频开发的视频平台默认都是使用的s ...

  9. linux查看与修改交换内存配置(解决zabbix-agent启动报错)

    问题 zabbix-agent在一台centos6.5上启动报错: cannot allocate shared memory of size 949056: [28] No space left o ...

最新文章

  1. 人脸识别是怎么识别人脸的?
  2. 【C#】VS2012+InstallShield2013制作软件更新包
  3. mysql 安装目录配置_linux 下mysql安装,目录配置
  4. ASCII码从小到大排序(字典序)
  5. ServicePointManager.ServerCertificateValidationCallback 冲突的解决
  6. sql azure 语法_Azure Kubernetes服务(AKS)–管理SQL Server数据库文件
  7. CocoaPods管理依赖库
  8. Spring Cloud Zuul路由网关(学习总结)
  9. 6-2 递归方法:汉诺塔问题 (10 分)
  10. 第一章 数据仓库理论专题
  11. IP种子眼中的《延禧攻略》流落何处?
  12. 中职计算机应用专业核心素养的,基于核心素养的中职计算机应用专业“课程革命”...
  13. git小乌龟TortoiseGit的使用
  14. 解决微信小程序“app.json: [“workers“] 字段需为 目录“错误及worker的使用
  15. Idea的快捷功能使用统计
  16. 我们眼中的互联网和认识以及我自身的看法
  17. 「儒系」产品经理:管理预期,做好增长的3个核心要素
  18. STATA IV估计,工具变量回归法,命令与小结(更新ING)
  19. 51nod 1737 配对 【树形dp】
  20. Android 源码

热门文章

  1. 用Excel分析音视频同步
  2. OpenCV中的Shi-Tomasi角点检测器
  3. Laravel框架-迁移文件
  4. 几篇神经网络训练语言模型文章的阅读
  5. 冒泡排序法(C语言实现)
  6. [C++]typedef typename什么意思?
  7. TMS320F28335中断向量表
  8. MATLAB矩阵与阵列
  9. 3d transform的(x、y、z)坐标空间及位置
  10. HTTPS/HTTP