Spring Boot下data.sql无法加载至H2数据库的问题解决
解决data.sql未加载到H2数据库的问题
问题分析与修复步骤
1. 添加JPA DDL行为配置
你当前的配置未指定spring.jpa.hibernate.ddl-auto,默认情况下Hibernate可能会自动生成表结构,覆盖或跳过data.sql的执行逻辑。添加以下配置:
spring.jpa.hibernate.ddl-auto=none
该配置会禁用Hibernate的自动建表功能,确保Spring Boot执行data.sql中的自定义表结构和数据插入语句。
2. 强制SQL初始化执行
Spring Boot 2.5+版本调整了SQL初始化默认行为,需明确配置初始化模式以保证data.sql被执行:
spring.sql.init.mode=always
此配置会强制应用启动时执行data.sql文件,无需依赖默认条件判断。
3. 修正表名大小写问题
你的data.sql中表名使用了双引号("USERS"),H2数据库中双引号会强制区分大小写,可能导致后续数据插入或表查询失败。建议去掉双引号,统一表名格式:
DROP TABLE IF EXISTS USERS; CREATE TABLE USERS ( ID BIGINT auto_increment NOT NULL PRIMARY KEY, AGE INTEGER NOT NULL, BIRTHDAY DATE, COUNTRY CHARACTER VARYING(255), EMAIL CHARACTER VARYING(255), FIRST_NAME CHARACTER VARYING(255), GENDER CHARACTER VARYING(255), LAST_NAME CHARACTER VARYING(255), PERSON_ID CHARACTER VARYING(255) );
4. 验证H2连接正确性
启动应用后,通过H2控制台(访问http://localhost:2121/h2-console)连接数据库,确保连接URL为jdbc:h2:mem:testdb,用户名root、密码root,登录后检查是否存在USERS表及对应数据。
完整配置示例
server.port=2121 spring.h2.console.enabled=true spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=root spring.datasource.password=root spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # 新增初始化配置 spring.jpa.hibernate.ddl-auto=none spring.sql.init.mode=always spring.batch.job.enabled=false
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

