解决 “Cannot read SQL script from class path resource [sql/XX.sql]“ 错误

这个错误表明你的应用程序无法从类路径(classpath)中找到 sql/init.sql 文件。以下是可能的原因和解决方案

常见原因及解决方案

文件位置不正确

确保你的 init.sql 文件确实位于 src/main/resources/sql/ 目录下(对于 Maven/Gradle 项目)。

检查点:

1.对于 Maven 项目:src/main/resources/sql/init.sql

2.对于 Gradle 项目:src/main/resources/sql/init.sql

资源路径引用错误

确保你使用的路径与实际位置匹配:

复制代码
// 正确的引用方式
new ClassPathResource("sql/init.sql")

如果文件直接在 resources 根目录下,应该使用:

复制代码
new ClassPathResource("init.sql")

构建工具未包含资源文件

检查构建配置:

对于 Maven:

复制代码
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
</build>

对于 Gradle:

复制代码
sourceSets {
  main {
    resources {
      srcDirs = ["src/main/resources"]
    }
  }
}

文件编码问题

确保 SQL 文件使用正确的编码(通常 UTF-8)。

文件权限问题

检查文件是否有读取权限。

调试步骤

验证文件是否存在:

复制代码
ClassPathResource resource = new ClassPathResource("sql/init.sql");
System.out.println("文件存在: " + resource.exists());

列出类路径内容检查:

复制代码
InputStream is = getClass().getResourceAsStream("/sql");
// 或者检查整个类路径

检查构建输出目录,确认文件是否被正确复制:

Maven: target/classes/sql/init.sql

Gradle: build/resources/main/sql/init.sql

替代方案

如果问题仍然存在,可以尝试:

使用绝对路径(不推荐,仅用于测试):
复制代码
new FileSystemResource("src/main/resources/sql/init.sql")
使用 Spring Boot 的自动配置:
复制代码
# application.properties
spring.datasource.schema=classpath:sql/init.sql
相关推荐
ManageEngineITSM3 小时前
技术的秩序:IT资产与配置管理的现代重构
大数据·运维·数据库·重构·工单系统
档案宝档案管理6 小时前
档案宝:企业合同档案管理的“安全保险箱”与“效率加速器”
大数据·数据库·人工智能·安全·档案·档案管理
wangjialelele6 小时前
mysql库操作二
数据库·mysql
Chloeis Syntax6 小时前
MySQL初阶学习日记(1)--- 数据库的基本操作
数据库·学习·mysql
workflower7 小时前
FDD(Feature Driven Development)特征驱动开发
大数据·数据库·驱动开发·需求分析·个人开发
韩立学长7 小时前
基于Springboot的旧物公益捐赠管理系统3726v22v(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
苦学编程的谢8 小时前
Redis_4_常见命令(完)+认识数据类型和编码方式
数据库·redis·缓存
小光学长8 小时前
基于Vue的儿童手工创意店管理系统as8celp7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
小光学长8 小时前
基于Vue的地铁综合服务管理系统7949eg04(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js