当前位置: 首页 > news >正文

解决 “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

相关文章:

  • 每日总结3.28
  • 卷积神经网络 - 转置卷积
  • Neo4j GDS-05-neo4j GDS 库中对应的中心性分析算法介绍
  • Netty——零拷贝
  • 上海SMT贴片技术解析与行业趋势
  • 【CSS3】02-选择器 + CSS特性 + 背景属性 + 显示模式
  • axios文件下载使用后端传递的名称
  • PyQt6实例_批量下载pdf工具_exe使用方法
  • OSPF邻居状态机
  • MAC环境给docker换源
  • 硬件老化测试方案的设计误区
  • open-cv的安装
  • 蓝桥杯[每日一题] 真题:连连看
  • 12 - AXI4接口之DDR读写实验
  • 深入解析缓冲区:计算机世界的“蓄水池”与“加速器”
  • Linux环境下安装部署Docker
  • ArayTS:一个功能强大的 TypeScript 工具库
  • nginx安装
  • 几种常见的.NET单元测试模拟框架介绍
  • 外贸人如何应对Temu的冲击?
  • 昆明一小区火灾调查报告:七旬夫妇身亡,生前拾荒存放大量可燃物
  • 多名幼师殴打女童被行拘后续,盘锦市教育局工作人员:该局将专项整治全市幼儿园
  • 篮球培训机构东方启明星被指停摆,家长称已登记未退费用超百万
  • 体坛联播|巴萨提前2轮西甲夺冠,郑钦文不敌高芙止步4强
  • 舱位已排到月底,跨境电商忙补货!美线订单大增面临爆舱,6月运价或翻倍
  • 夜读丨母亲为燕子打开家门