You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Spring测试时错误加载main目录的data.sql,无法指定使用test目录的配置与数据文件

求助:Spring测试时错误加载main目录的data.sql,无法指定使用test目录的配置与数据文件

兄弟,我之前也踩过Spring Boot测试加载脚本的坑,给你几个实际试过有效的排查和解决方向:

1. 先确认测试的Profile真的生效了

有时候@ActiveProfiles("test")看起来加了,但实际没生效是常有的事,先把这个基础点确认了:

  • 你可以在test/resources/application.properties里加一行调试日志:
    logging.level.org.springframework.context=DEBUG
    
    启动测试后看控制台,有没有输出类似Loaded environment profiles [test]的日志,确认test配置被加载。
  • 或者直接在测试类里加个小代码打印激活的Profile:
    @Autowired
    private Environment env;
    
    @BeforeEach
    void checkActiveProfiles() {
        System.out.println("当前激活的Profile: " + Arrays.toString(env.getActiveProfiles()));
    }
    
    如果输出里没有test,那得先解决Profile不生效的问题,比如检查测试类的包路径是否和主应用一致,有没有其他配置类覆盖了Profile。

2. 修正SQL初始化的配置(关键坑点!)

看你的测试配置里犯了一个很容易踩的错误:你用了spring.sql.init.schema-locations来指定data.sql,但这个配置是用来指定建表的Schema文件的,插入数据的文件应该用spring.sql.init.data-locations!

赶紧把test/resources/application.properties里的配置改对:

# 把schema-locations改成data-locations!
spring.sql.init.data-locations=classpath:data.sql
# 如果你的data.sql里是建表语句才用schema-locations,否则一定要用data-locations

另外,为了从根源避免和main目录的文件重名冲突,你可以把test目录的data.sql改名为test-data.sql,然后配置改成:

spring.sql.init.data-locations=classpath:test-data.sql

这样就完全不会和main里的文件混淆了。

3. 用@Sql注解直接强制指定脚本

如果上面的配置还是不生效,那可以直接在测试类上用@Sql注解,强制指定要加载的脚本,这个优先级很高,基本不会出错:

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
@Sql(scripts = "classpath:data.sql") // 这里会优先加载test/resources下的data.sql
public class SomeRepositoryTest {
    // ... 你的测试代码
}

4. 检查@DataJpaTest的自动配置冲突

@DataJpaTest默认会禁用一些自动配置类,有可能和你的SQL初始化配置冲突,你可以试试在测试类上加上@Import(SqlInitializationAutoConfiguration.class),确保SQL初始化的配置被正确加载:

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
@Import(SqlInitializationAutoConfiguration.class)
public class SomeRepositoryTest {
    // ...
}

5. 确认构建工具的资源配置(兜底检查)

虽然一般默认没问题,但还是可以确认下Maven/Gradle有没有正确把test目录的资源打包到测试环境:

  • 如果是Maven,检查pom.xml里的testResources配置,确保是这样的(默认就是这个配置,不用改,只是确认):
    <build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
    </build>
    
  • 如果是Gradle,直接执行一下clean test命令,同步下项目资源,确保test目录的文件被正确加载。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:13:07