Spring Boot 2.3.5.RELEASE正式升级,SpringBoot新版本发布

Spring Boot正式升级到2.3.5.RELEASE,带来了bug修复、文档更新和众多依赖项的升级。微服务应用matecloud已同步更新。本次更新详细修复了配置属性注释处理器、增量编译、H2控制台等问题,并提升了与Jetty、Undertow、Netty等服务器的兼容性。

版本升级

spring boot 正式版本于今日升级到2.3.5.Release.

应用案例

微服务:https://github.com/matevip/matecloud
SpringBoot也同步升级至2.3.5.RELEASE版本,欢迎体验

升级内容

bug修复

  • 配置属性注释处理器不会注意到覆盖的getter方法#23969
  • 增量编译不会保留内部类的元数据#23959
  • HttpEncodingAutoConfiguration未添加到WebMvcTest切片 #23813
  • Jar条目在BOOT-INF / lib中与分层jar和Maven重复#23801
  • 使用不带jakarta.annotation和javax.annotation的Jetty启动器时,server.servlet.session.timeout无效。#23750
  • 如果在刷新过程中杀死了JVM,则关闭钩子不会关闭上下文#23743
  • 设置server.undertow.eager-filter-init无效#23676
  • @ConfigurationPropertiesBinding不适用于Formatter bean #23614
  • H2控制台错误与AbstractRoutingDataSource #23569
  • 使用嵌入式Jetty时,对HEAD请求的错误响应具有正文#23555
  • 自定义图层定义不获取快照#23533
  • BootJar.getConfigurations()不应是公共API #23527
  • Netty tcNative的依赖关系管理不包括其netty-tcnative模块# 23508
java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at com.sun.ng.DaiNgMApplication.main(DaiNgMApplication.java:30) [classes/:na] Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.sun.ng.mapper.system.ScheduleSettingMapper.selectList at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:227) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:49) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.6.jar:3.4.6] at com.sun.proxy.$Proxy95.selectList(Unknown Source) ~[na:na] at com.sun.ng.commonutils.config.schedule.SysJobRunner.run(SysJobRunner.java:32) ~[classes/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) [spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] ... 5 common frames omitted
09-18
<think> 嗯,用户这次的问题是关于Spring Boot应用启动时遇到的特定异常,看起来是MyBatis映射文件配置不正确导致的。用户明确给出了异常信息和版本号(Spring Boot 2.3.5.RELEASE + MyBatis 3.4.6),还提供了站内引用作为线索,说明用户有一定技术背景。 用户引用的两段内容其实很有价值:引用[1]提到了XML文件中id与方法名不符的问题,引用[2]展示了典型的启动失败日志。虽然用户说这些不是其真正需求,但结合用户当前描述的异常,其实可以串联起来——核心就是MyBatis的SQL映射配置问题。 仔细看用户描述的异常链:CommandLineRunner执行失败是因为ScheduleSettingMapper.selectList绑定失败。这种问题在MyBatis中很经典,通常有四个排查方向: 首先是XML文件位置,Spring Boot默认要求mapper.xml放在resources目录下同名包结构中,这点很容易被忽略; 其次是XML里的namespace必须完全对应Mapper接口的全限定名; 再就是SQL语句的id必须和接口方法名严格一致; 最后还要检查MyBatis的配置项是否启用了XML映射。 用户可能已经检查过部分内容,但没发现错误,所以需要给出具体的排查路径。比如namespace的"."写成"/"这种细节错误就很常见。另外考虑到用户用的是较旧的Spring Boot版本,还要注意是否缺少@MapperScan注解这类基础配置。 突然想到,如果用户用的是MyBatis-spring-boot-starter,还要注意版本兼容性问题。不过MyBatis 3.4.6配合Spring Boot 2.3.5应该是兼容的,所以暂时排除版本冲突,重点还是放在配置上。 在解决方案里需要强调几个关键操作:检查target目录是否包含XML文件、开启MyBatis日志确认加载情况、使用mybatis.config-location配置显式指定路径。特别是最后一点,很多开发者不知道配置项要写成形如"classpath*:mapper/**/*.xml"才能递归扫描子目录。 用户可能更想要直接可操作的步骤,所以回复要分层呈现:从最可能的XML路径问题开始,到配置检查,再到其他罕见情况。每个步骤都要给出具体示例代码,比如mybatis.mapper-locations的正确写法。最后补充debug建议也很重要,因为这类问题光看描述很难定位,必须看实际日志输出。 </think> 根据您描述的异常信息(`Failed to execute CommandLineRunner` 由 `Invalid bound statement` 引发),核心问题是 **MyBatis 的 SQL 映射文件(Mapper XML)未正确加载或配置错误**。以下是针对 Spring Boot 2.3.5 + MyBatis 3.4.6 的完整解决方案: --- ### 解决方案分步说明 #### 1. **检查 XML 文件路径与配置** MyBatis 要求 XML 文件必须位于编译后的 `target/classes` 目录下,且路径需与 Mapper 接口包名一致。 **正确结构示例**: ```bash src/main/resources └── com └── sun └── ng └── mapper └── system └── ScheduleSettingMapper.xml # XML 文件名需与接口名一致 ``` 在 `application.properties` 中显式指定扫描路径: ```properties # 确保路径包含 XML 所在包 mybatis.mapper-locations=classpath*:com/sun/ng/mapper/**/*.xml ``` #### 2. **验证 XML 文件内容** 检查 `ScheduleSettingMapper.xml` 的 **namespace** 和 **SQL id**: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 必须对应 Mapper 接口全限定名 --> <mapper namespace="com.sun.ng.mapper.system.ScheduleSettingMapper"> <!-- id 必须与接口方法名一致 --> <select id="selectList" resultType="com.sun.ng.entity.ScheduleSetting"> SELECT * FROM schedule_setting </select> </mapper> ``` > **关键点**: > - `namespace="com.sun.ng.mapper.system.ScheduleSettingMapper"` > - `<select id="selectList">`(与接口方法名 `selectList()` 完全匹配) #### 3. **确认 Mapper 接口扫描** 在 Spring Boot 启动类添加 `@MapperScan`: ```java @SpringBootApplication @MapperScan("com.sun.ng.mapper.system") // 指定扫描的 Mapper 包 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 4. **检查依赖配置** 确保 `pom.xml` 包含 MyBatis-Spring-Boot-Starter 且版本兼容: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> <!-- 兼容 Spring Boot 2.3.5 --> </dependency> ``` #### 5. **清理构建缓存** 删除 `target` 目录并重新编译,避免缓存导致 XML 未更新: ```bash mvn clean package ``` #### 6. **开启 MyBatis 日志(调试)** 在 `application.properties` 中添加: ```properties logging.level.com.sun.ng.mapper.system=DEBUG mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ``` 启动时观察日志: - 是否加载了正确的 XML 文件 - SQL 语句是否成功注册 --- ### 常见错误原因总结 | 问题类型 | 现象 | 解决方案 | |-------------------------|-------------------------------|------------------------------| | XML 文件路径错误 | 编译后 `target/classes` 中无 XML | 调整文件位置至 `resources` 下同名包 | | `namespace` 或 `id` 拼写错误 | `BindingException` 提示方法不存在 | 检查接口全限定名和方法名一致性 | | 缺失 `@MapperScan` | Mapper 接口未被 Spring 管理 | 在启动类添加扫描注解 | | XML 未被编译 | `target/classes` 中无 XML 文件 | 检查 `pom.xml` 中 `<resources>` 配置 | > **经验提示**:MyBatis 的 `Invalid bound statement` 错误 90% 由 **XML 路径/配置错误** 或 **接口与 XML 映射不一致** 导致[^1]。 --- ### 相关问题 1. **如何避免 MyBatis 的 `BindingException` 错误?** > 建议使用 MyBatis 的注解 `@Mapper` 代替 XML 配置,或通过单元测试验证 SQL 映射。 2. **Spring Boot 中 CommandLineRunner 执行失败的其他常见原因有哪些?** > 可能涉及数据库连接失败、Bean 注入冲突或循环依赖。开启 `debug: true` 查看详细启动报告[^2]。 3. **MyBatis-Plus 如何简化 SQL 映射配置?** > 通过继承 `BaseMapper<T>` 接口,无需编写 XML 即可实现 CRUD 方法(需添加 `mybatis-plus-boot-starter` 依赖)。 [^1]: 映射文件与接口一致性是 MyBatis 运行的基础条件。 [^2]: Spring Boot 的 `debug` 模式可暴露启动期 Bean 依赖问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值