在使用 Spring Boot 和 MyBatis 连接 MySQL 数据库时,开发者可能会遇到一些常见的启动报错。这些报错通常与配置文件错误、依赖库问题、数据库连接设置错误等相关。本文将详细分析几种常见的启动报错,并提供相应的解决方案。
一、常见启动报错及原因分析
1.1 java.sql.SQLException: Access denied for user 'root'@'localhost'
错误描述:
当 Spring Boot 启动时,尝试连接 MySQL 数据库可能会出现如下错误:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
原因分析:
- 数据库用户名或密码错误。
- 数据库用户权限不足,无法访问指定数据库。
- MySQL 配置中未允许特定用户从指定主机登录。
解决方案:
检查
application.properties
或application.yml
中的数据库用户名和密码配置是否正确:spring.datasource.username=root spring.datasource.password=your_password
确保 MySQL 中的用户具有访问权限,可以使用以下 SQL 语句授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
1.2 com.mysql.cj.exceptions.InvalidConnectionAttributeException
错误描述:
在使用 MySQL 8.x 驱动时,可能会遇到以下错误:
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'XXX' is unrecognized or represents more than one time zone.
原因分析:
- MySQL 的
time_zone
配置不正确,导致 MySQL 驱动无法识别时区设置。 - 连接字符串中缺少
serverTimezone
参数。
解决方案:
在
application.properties
或application.yml
文件中设置正确的serverTimezone
参数,例如:spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC
- 如果需要设置为本地时区,可以将
serverTimezone
改为Asia/Shanghai
等本地时区。
1.3 org.apache.ibatis.binding.BindingException: Invalid bound statement
错误描述:
当 MyBatis 启动时,如果 SQL 映射文件配置有误,可能会出现以下错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.mapper.MyMapper.selectById
原因分析:
- MyBatis 的
Mapper
接口方法未正确映射到 XML 配置中的 SQL 语句。 Mapper
XML 文件路径配置错误,导致无法加载映射文件。
解决方案:
确保
Mapper
接口与 XML 映射文件中的namespace
一致:<mapper namespace="com.example.mapper.MyMapper"> <select id="selectById" resultType="com.example.entity.MyEntity"> SELECT * FROM my_table WHERE id = #{id} </select> </mapper>
检查 MyBatis 的 XML 映射文件路径配置,确保文件可以正确加载:
mybatis.mapper-locations=classpath:mapper/*.xml
1.4 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
错误描述:
当 Spring Boot 启动时,如果数据库配置缺失或不完整,可能会出现以下错误:
Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$DataSourcePropertiesConfigurationMissingException: Failed to configure a DataSource
原因分析:
- Spring Boot 启动时未找到有效的数据源配置。
- 缺少
spring.datasource.url
或spring.datasource.driver-class-name
配置项。
解决方案:
在
application.properties
或application.yml
中补充完整的数据源配置:spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
确保数据库驱动依赖已正确添加到
pom.xml
中:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency>
1.5 java.net.ConnectException: Connection refused
错误描述:
启动 Spring Boot 应用时,尝试连接 MySQL 数据库可能会出现连接拒绝错误:
java.net.ConnectException: Connection refused (Connection refused)
原因分析:
- MySQL 服务未启动或服务端口配置错误。
- 数据库服务器防火墙阻止了连接请求。
- MySQL 配置中未允许外部连接(仅允许本地连接)。
解决方案:
确保 MySQL 服务已启动:
sudo systemctl start mysql
检查 MySQL 配置文件(
my.cnf
或my.ini
)中的bind-address
设置,确保其允许外部访问:bind-address = 0.0.0.0
检查防火墙设置,确保允许 MySQL 的端口(默认 3306)通过:
sudo firewall-cmd --permanent --add-service=mysql sudo firewall-cmd --reload
三、总结
在 Spring Boot 项目中使用 MyBatis 连接 MySQL 时,常见的启动报错通常与数据库配置、驱动依赖、网络连接等因素相关。通过仔细检查配置文件、依赖库版本以及 MySQL 的网络配置,可以有效解决这些问题。掌握这些常见错误的原因及解决方法,有助于开发者快速定位并修复问题,确保项目顺利启动。