SpringBoot项目使用外置Tomcat启动报错Failed to extract parameter names for org.apache.ibatis.mapping.ResultMap

SpringBoot项目在高版本中由于引入JNDI查询导致外置Tomcat启动失败,错误信息提及Failed to extract parameter names for org.apache.ibatis.mapping.ResultMap。解决方法是在resources下创建配置文件,内容禁用JNDI,并在Tomcat启动时加入VM Options参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误信息:

springboot项目打成war包时部署到外部tomcat时报错,报错信息如下:

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'mybatis.configuration.result-maps[0]' to org.apache.ibatis.mapping.ResultMap:

    Reason: Failed to extract parameter names for org.apache.ibatis.mapping.ResultMap(org.apache.ibatis.mapping.ResultMap$1)

Action:

Update your application's configuration

原因分析:

在SpringBoot 2.1.9.RELEASE中不会出现这个问题,高版本中引入了JNDI查询而出现此问题,因此禁用jndi即可。
SpringBoot启动时会首先读取spring.properties配置文件,再去读取系统环境变量,查找spring.jndi.ignore的值。

解决方法

  1. 在项目resources根目录下新增spring.properties配置文件,配置文件内容为:
### MyBatis 使用 StdOutImpl 适配器初始化日志时出现的报错解决方案 当遇到 `MyBatis` 日志配置使用 `StdOutImpl` 初始化失败的情况,通常是因为日志框架之间的冲突或未正确设置所致。为了确保 `MyBatis` 的日志能够正常通过标准输出显示,在项目中应合理配置日志库。 对于基于 Gradle 构建工具并采用 SSM (Spring, Spring MVC 和 MyBatis) 技术栈的应用程序而言,推荐的做法是统一管理日志记录机制。具体来说: - **排除默认的日志依赖**:如果当前环境中存在多个不同版本的日志实现类,则可能导致冲突。因此建议先移除不必要的日志组件引入[^1]。 ```groovy configurations { all*.exclude group: 'commons-logging' } ``` - **指定唯一的日志门面和实现**:这里选择 SLF4J 作为日志抽象层,并搭配 Log4j2 实现具体的日志功能。这可以通过调整 build.gradle 文件内的依赖项完成。 ```groovy dependencies { implementation 'org.slf4j:jcl-over-slf4j:1.7.30' // 替换 commons-logging implementation 'org.slf4j:slf4j-api:1.7.30' implementation 'org.apache.logging.log4j:log4j-core:2.13.3' implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.13.3' // MyBatis 及其他必要依赖... implementation group: 'org.mybatis', name: 'mybatis', version: '3.5.5' } ``` - **配置 log4j2.xml 或者 logback.xml** :定义好日志级别以及输出格式等内容。下面是一个简单的例子展示如何让 SQL 执行语句打印到控制台上。 ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <!-- 设置 mybatis 调试信息 --> <Logger name="org.apache.ibatis" level="DEBUG"/> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` 上述措施可以有效避免由于错误配置而导致的日志初始化异常问题。同时需要注意的是,若仍然存在问题,可能还需要检查是否有第三方 jar 包内嵌入了不兼容的日志实现,从而引发冲突;另外就是确认所使用的 MyBatis 版本是否支持预期的日志接口。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值