这个错误表明你的应用程序无法从类路径(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