Spring Boot启动时H2内存数据库未自动创建表问题
Spring Boot H2数据库INIT脚本未执行问题解决
核心排查与修复步骤
- 修正配置大小写:YAML配置中
Spring:必须改为小写spring:,Spring Boot配置属性大小写敏感,大写开头的配置不会被正确加载,这是常见的致命错误。 - 调整JDBC URL的INIT路径:将URL中的INIT部分修改为
INIT=RUNSCRIPT FROM 'classpath:createTable-0.sql',明确指定从classpath加载SQL文件。确保createTable-0.sql放在src/main/resources目录下,这是Spring Boot默认的资源文件路径。 - 添加JPA DDL自动生成控制:在JPA配置中添加
spring.jpa.hibernate.ddl-auto: none,避免Hibernate自动生成表的逻辑干扰自定义脚本执行。修改后的完整配置如下:
spring: datasource: url: jdbc:h2:mem:testdb;MODE=h2;LOCK_MODE=0;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM 'classpath:createTable-0.sql'; username: sa password: sa driverClassName: org.h2.Driver h2: console: enabled: true path: /h2 jpa: properties: hibernate: dialect: org.hibernate.dialect.H2Dialect hibernate: ddl-auto: none
- 检查SQL文件状态:确认SQL文件在
src/main/resources下,且编码为UTF-8(手动执行有效可排除语法问题,但需确保文件被正确打包到classpath)。 - 查看启动日志:启动应用时查看控制台日志,搜索
H2或INIT相关内容,排查是否有文件找不到、权限不足等错误提示。
内容的提问来源于stack exchange,提问作者varna
相关产品推荐
相关产品推荐

