Kotlin Spring Boot中schema.sql未执行致数据库为空问题
解决Spring Boot中schema.sql未执行导致表不存在的问题
针对你遇到的MESSAGES表不存在、schema.sql未执行的问题,结合Spring Boot 2.7.4的版本特性,给出以下排查和解决步骤:
1. 替换废弃的初始化配置(关键)
Spring Boot 2.5版本之后,spring.datasource.initialization-mode和spring.datasource.schema已被废弃,改用spring.sql.init.*系列配置。将你的application.properties中相关配置替换为:
spring.sql.init.schema-locations=classpath:sql/schema.sql spring.sql.init.mode=always
旧配置在2.7.x版本中不会生效,这是脚本未执行的最可能原因。
2. 确认脚本路径与文件存在性
- 确保
schema.sql放在main/resources/sql/目录下,Gradle会自动将该目录下的文件打包到classpath中; - 检查文件名和路径拼写,避免大小写或路径错误(Windows系统路径不区分大小写,但打包后可能受影响)。
3. 验证Hibernate配置
保持spring.jpa.hibernate.ddl-auto=none的配置,避免Hibernate自动生成表结构覆盖你的脚本,同时确保没有其他配置文件(如application-dev.properties)覆盖该设置。
4. 查看启动日志定位问题
启动应用时,查看控制台日志:
- 如果找不到类似
Executing SQL script from classpath resource [sql/schema.sql]的日志,说明脚本未被加载,检查路径配置; - 如果有SQL执行错误日志,根据错误信息调整SQL语句(你的当前SQL语法在H2中是合法的,大概率不是语法问题)。
5. 验证数据库连接与路径
- 启用H2控制台,添加配置:
启动后访问spring.h2.console.enabled=true spring.h2.console.path=/h2-consolelocalhost:8080/h2-console,用配置中的JDBC URL连接数据库,直接查看是否存在messages表; - 检查JDBC URL中的文件路径:
jdbc:h2:file:./data/testdb是相对路径,确保应用启动目录下存在data文件夹,或改用绝对路径(如jdbc:h2:file:C:/data/testdb)避免路径问题。
内容的提问来源于stack exchange,提问作者Inspi
相关产品推荐
相关产品推荐

