Spring Boot连接远程MariaDB遇404及数据库连接异常求助
问题排查分析
1. 优先解决MariaDB连接终止问题(核心根源)
数据库连接失败大概率导致Spring Boot应用启动不完整,控制器未被正确注册,最终触发404错误。
- 核对用户权限范围:确认授权用户允许从你的本地IP访问,执行以下SQL(替换为你的网段/IP、数据库、账号密码):
别只授权GRANT ALL ON your_database.* TO 'your_user'@'192.168.x.%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;localhost,必须覆盖客户端所在的局域网IP段。 - 测试网络连通性:在本地执行
telnet 树莓派IP 3306或nc -zv 树莓派IP 3306,确认3306端口能通。树莓派端要开放端口:sudo ufw allow 3306(如果启用了ufw防火墙)。 - 深挖MariaDB日志细节:找到
读取通信数据包出错的完整日志上下文,看是否是驱动版本不兼容、超时设置或数据包大小匹配问题。 - 匹配驱动与数据库版本:树莓派MariaDB 10.6+对应
mariadb-java-client:3.0.0+版本,避免版本差异导致的通信协议不兼容。
2. 排查404错误(关联结果)
若数据库连接失败,Spring Boot可能跳过JPA组件、控制器的加载,请求被当成静态资源处理返回404。
- 调整日志级别:在
application.properties中添加logging.level.org.springframework=DEBUG,重启应用后查看启动日志,找数据库连接异常、Bean创建失败的信息。 - 验证控制器注解:确认控制器类标注了
@RestController/@Controller,@GetMapping("/home/owner")、@PostMapping("/home/owner")无拼写错误。 - 检查组件扫描范围:如果控制器不在主类的同级/子包下,主类需添加
@ComponentScan(basePackages = {"你的控制器包路径"})确保被扫描。
3. 配置与依赖校验
application.properties关键配置:
spring.datasource.url=jdbc:mariadb://树莓派IP:3306/你的数据库名?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=授权账号 spring.datasource.password=密码 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.jpa.hibernate.ddl-auto=update # 按需调整 spring.jpa.show-sql=true
注意:局域网内关闭SSL,指定时区避免连接时的时区异常。
pom.xml依赖确保:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> </dependency>
不要同时引入MySQL和MariaDB驱动,避免依赖冲突。
4. 分步验证流程
- 用Navicat/DBeaver单独连接树莓派MariaDB,确认能正常执行SQL,排除数据库自身问题。
- 启动Spring Boot应用,确认日志输出
Started Application in X seconds,若没有,重点排查启动错误栈。 - 应用启动正常后,用Postman/浏览器访问接口,查看控制台是否有请求处理日志,确认控制器是否生效。
内容的提问来源于stack exchange,提问作者s100yanov
相关产品推荐
相关产品推荐

