目录
- 配置了Druid但无法启动
- BeanNotOfRequiredTypeException
- 删除.idea目录后,运行配置文件没有了
- mybatis-spring兼容问题
- 数据库找不到表报错
- mapper扫描范围过大导致的报错
配置了Druid但无法启动
SpringBoot版本是3.2.5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Druid版本是:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
配置文件中配置了使用Druid
datasource:
druid:
url: jdbc:mysql://localhost:3306/HelloSpring?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
username: root # mysql 登录用户名
password: 123456 # mysql 登录密码
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL驱动,Java连接MySQL必需
启动失败,并且报错找不到datasource.url。
查看启动时的相关日志,发现Druid并没有配置成功,而是使用的默认的Hikari。
失败原因:
SpringBoot 3.2.5与druid-spring-boot-starter不兼容。
使用下面的版本解决问题。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.28</version>
</dependency>
本质还是:SpringBoot 3.2.5 与依赖库的版本兼容问题。
BeanNotOfRequiredTypeException
报错
BeanNotOfRequiredTypeException: ddlApplicationRunner
expected: Runner
actual: NullBean
原因:
MyBatis-Plus 代码生成器里的 ddlApplicationRunner Bean 返回了 null,Spring Boot 3 不允许 → 启动直接失败
解决:
移除了这个依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
移除后仍然报相同的错误。
然后又修改了mybatis-plus-boot-starter版本,从3.5.3.1修改为3.5.5
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
问题解决了。
本质还是:SpringBoot 3.2.5 与依赖库的版本兼容问题。
删除.idea目录后,运行配置文件没有了
这是 IntelliJ IDEA 的典型情况:
.idea 目录被删 = 项目运行配置 + 工程结构配置全没了,所以右上角 Run Configuration 消失、运行按钮变灰。
如果是 Spring Boot 项目:
找到启动类(带 main 方法)
右键点击:
Run ‘XXXApplication’
IDEA 会自动创建运行配置
mybatis-spring兼容问题
添加了mybatis-plus-boot-starter后,启动报错
<!--
mybatis-plus-boot-starter内部依赖的mybatis-spring版本是2.12.2,它与spring boot 3.x有版本冲突
所以在下面直接指定了mybatis-spring为3.0.3
-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.16</version>
</dependency>
<!--
作用:Spring 不认识 MyBatis 的 Mapper!Spring 不知道 UserMapper 是什么东西,不会创建它,不会管理它,更不能注入给 Service。
解决方案:
mybatis-spring 就是中间翻译官 + 胶水
它告诉 Spring:
“这些 Mapper 接口是特殊的类,你要帮我创建、管理、注入!”
-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
本质还是:SpringBoot 3.2.5 与依赖库的版本兼容问题。
数据库找不到表报错
mysql内有一个数据库HelloSpring,下面有一个表叫user。
HelloSpring工程内的数据库DAO层使用的数据model是UserEntity
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {
}
报错:找不到user_entity表。
解决方案:指定表名
@Data
@TableName("user") //指定数据库内的表名称,如果不写默认会找:UserEntity → 默认表名 user_entity
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Integer age;
private String sex;
private String address;
private String describes;
private String image;
}
mapper扫描范围过大导致的报错
一开始是这样写的,扫描范围过大
@MapperScan("com.lxy.hellospring")
导致userService实例被赋值成了其它类型,无法调用它的接口
@Autowired
private UserService userService;
通过下面的方式明确具体的扫描位置
@MapperScan("com.lxy.hellospring.module.user.mapper")
行者常至,为者常成!