Spring Boot启动报dataSourceScriptDatabaseInitializer错误
Spring Boot 2.7.0 启动即关闭问题排查方案
你看到的dataSourceScriptDatabaseInitializer相关报错不是根因——这个错误是Spring容器启动失败、开始销毁已有单例Bean之后抛出的次生异常,真正的触发点在容器销毁动作之前,按以下优先级排查修复:
1. 修复配置文件基础错误
首先修正application.properties里的端口配置语法问题:
# 错误写法,properties格式默认使用=作为键值分隔符,冒号写法会导致端口配置失效 server.port:9090
替换为正确写法:
server.port=9090
如果你的项目资源目录下存在schema.sql/data.sql数据库初始化脚本,Spring Boot 2.7默认会在JPA Hibernate建表之前执行这些脚本,此时表结构还未生成会直接抛SQL异常触发容器关闭。如果你不需要Spring自动执行初始化脚本,新增一行配置关闭该功能:
spring.sql.init.mode=never
2. 校验数据库连接配置
逐项检查数据源配置有效性:
- 确认本地5432端口的PostgreSQL服务处于运行状态
- 确认
orderdetails数据库已经手动创建(PostgreSQL不会自动创建不存在的库,Hibernate仅能在已存在的库内执行建表操作) - 确认数据库用户名、密码配置和本地PostgreSQL凭据一致
- 临时注释
spring.datasource.hikari.auto-commit=false配置,部分PostgreSQL驱动版本下该参数会导致初始化连接时事务状态异常,触发连接失败
数据源初始化失败是这类启动即关闭问题的最高频诱因,连接失败后容器会直接进入销毁流程,后续就会打印你看到的Hikari连接池关闭、EntityManagerFactory关闭、销毁阶段不允许创建Bean等连锁报错。
3. 排查定时任务启动异常
你的启动类开启了@EnableScheduling,日志中已经明确出现Unexpected error occurred in scheduled task提示,说明启动阶段就有定时任务抛出了未捕获异常:
- 先临时注释启动类上的
@EnableScheduling注解,重启应用确认是否能正常启动 - 如果能正常启动,逐个检查所有标注
@Scheduled的方法,修复启动阶段就触发的调用异常、未捕获的运行时错误即可
4. 后续定位技巧
如果以上步骤修复后仍然启动失败,不要盯着容器销毁阶段的报错看,直接找日志里HikariPool-1 - Shutdown initiated...这行打印之前的第一个异常堆栈,那才是导致启动失败的真正根因。
内容的提问来源于stack exchange,提问作者Shivam Singh
相关产品推荐
相关产品推荐

