Intellij运行Maven SpringBoot项目报ApplicationContext启动错误如何解决
故障根因
你遇到的是Spring Boot启动时ApplicationContext初始化失败,结合给出的项目配置,按出现概率从高到低排序,触发原因如下:
- 数据库连接配置异常,占这类报错的90%以上
- 你配置的连接地址指向
crudusers库,但JPA的spring.jpa.hibernate.ddl-auto=update配置只会自动同步表结构,不会自动创建数据库,本地MySQL中如果不存在这个库会直接抛出连接异常 - 配置文件里的数据库用户名、密码是占位值
username/password,如果没有替换为本地MySQL真实的账号密码,会直接鉴权失败 - 你用的是MySQL 8.0.26版本驱动,当前连接url没有配置时区参数,驱动默认时区和本地系统时区不匹配时也会导致连接失败
- 本地MySQL服务未启动、3306端口被其他程序占用也会导致连接不通
- 你配置的连接地址指向
- 组件扫描路径不匹配
如果启动类RestApiApplication所在的包层级不在实体类、Repository接口、Controller的上层包,Spring扫描不到@Entity、@Repository、@RestController标注的类,就会触发Bean初始化失败 - 依赖异常
本地Maven仓库中的mysql驱动、JPA相关依赖如果下载不完整或者文件损坏,也会导致启动失败
修复方案
按以下顺序逐步排查修复:
- 先处理数据库配置问题
- 用本地MySQL客户端登录你的数据库服务,手动执行SQL创建目标库:
CREATE DATABASE IF NOT EXISTS crudusers DEFAULT CHARACTER SET utf8mb4; - 将配置文件中的
spring.datasource.username、spring.datasource.password替换为你本地MySQL实际可用的账号密码 - 修改数据库连接url,补充时区与编码参数:
spring.datasource.url=jdbc:mysql://localhost:3306/crudusers?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8 - 确认本地MySQL服务处于正常运行状态,3306端口没有被其他程序占用
- 用本地MySQL客户端登录你的数据库服务,手动执行SQL创建目标库:
- 修正包扫描路径
最稳妥的方式是把启动类RestApiApplication放到com.server.app.rest包下,这样实体类、Repo、Controller都在启动类的子包路径中,Spring默认的组件扫描规则就能覆盖到所有标注了注解的类。如果启动类位置无法调整,就在启动类上手动添加注解指定扫描范围:@SpringBootApplication @EntityScan("com.server.app.rest.Models") @EnableJpaRepositories("com.server.app.rest") public class RestApiApplication { public static void main(String[] args) { SpringApplication.run(RestApiApplication.class, args); } } - 修复依赖问题
打开IDEA右侧的Maven面板,点击刷新按钮强制重新拉取所有依赖,也可以在项目根目录执行如下Maven命令清理并重新拉取依赖:
如果以上步骤做完还是启动失败,就在IDEA的启动配置中给程序添加mvn clean install -U--debug启动参数,重新启动后控制台会打印完整的条件评估报告,直接定位具体的失败点即可。
修复验证:项目正常启动后控制台会输出
Started RestApiApplication相关日志,浏览器访问http://localhost:8080能返回Welcome字符串即为修复完成。
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

