在Spring Boot工程中,若未识别到resources/db
文件夹下的SQL文件,通常与资源路径配置、构建工具设置或代码加载方式有关。以下是逐步排查和解决方案:
1. 确认SQL文件存放路径
Spring Boot默认从类路径(classpath:
)加载资源,标准资源目录为src/main/resources
。确保SQL文件存放于:
src/main/resources/db/
编译后,文件应被复制到输出目录的classes/db/
下(如Maven的target/classes/db/
或Gradle的build/classes/java/main/db/
)。
2. 检查构建工具资源配置
构建工具(Maven/Gradle)可能因自定义配置排除了db
目录,导致文件未被打包。
Maven项目
检查pom.xml
中的<resources>
配置,确保未排除db
目录:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 确保没有排除db目录 -->
<!-- <excludes><exclude>db/**</exclude></excludes> -->
</resource>
</resources>
</build>
Gradle项目
检查build.gradle
中的sourceSets
配置,确保包含db
目录:
sourceSets {
main {
resources {
srcDirs = ['src/main/resources']
// 确保包含db目录(默认已包含,无需额外配置)
}
}
}
3. 显式配置SQL文件路径(关键)
若通过Spring Boot自动初始化数据库(如schema.sql
/data.sql
),需在application.properties
或application.yml
中显式指定路径 (默认仅加载根路径的schema.sql
/data.sql
)。
示例配置:
# application.properties
# 加载db目录下的schema.sql(建表语句)
spring.datasource.schema=classpath:db/schema.sql
# 加载db目录下的data.sql(插入数据)
spring.datasource.data=classpath:db/data.sql
# application.yml
spring:
datasource:
schema: classpath:db/schema.sql
data: classpath:db/data.sql
4. 其他场景:手动加载SQL文件
若在代码中手动加载(如通过JdbcTemplate
或@Sql
注解),需使用正确的类路径前缀。
示例1:通过@Sql
注解(测试场景)
@SpringBootTest
@Sql(scripts = "classpath:db/init-test.sql") // 指向db目录下的init-test.sql
public class MyServiceTest {
// ...
}
示例2:通过JdbcTemplate
执行
@Autowired
private JdbcTemplate jdbcTemplate;
public void init() {
// 读取db目录下的script.sql
Resource resource = new ClassPathResource("db/script.sql");
String sql = new String(resource.getInputStream().readAllBytes());
jdbcTemplate.execute(sql);
}
5. 验证文件是否被正确打包
构建项目后,检查输出目录(如target/classes/db/
)是否存在SQL文件:
-
Maven:执行
mvn clean package
,查看target/classes/db/
。 -
Gradle:执行
gradle clean build
,查看build/classes/java/main/db/
。
6. 其他注意事项
-
数据库方言与初始化顺序 :若使用Hibernate,确保
spring.jpa.hibernate.ddl-auto=none
(避免Hibernate自动生成DDL覆盖schema.sql
)。 -
外部配置覆盖 :若通过
--spring.config.location
指定外部配置,需确认配置中包含spring.datasource.schema
路径。 -
IDE缓存问题 :重启IDE或清理缓存(如IntelliJ的
File > Invalidate Caches
)。
总结
核心步骤:
-
确认SQL文件在
src/main/resources/db/
下; -
检查构建工具未排除该目录;
-
在
application.properties
中显式配置spring.datasource.schema/data
路径; -
手动加载时使用
classpath:db/xxx.sql
前缀。