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

使用@DataJpaTest注解时无法加载application.properties文件的问题

解决@DataJpaTest无法加载application.properties的问题

我来帮你捋捋这个问题——我之前也碰到过类似的坑!首先得搞清楚@DataJpaTest的本质:它是Spring Boot提供的切片测试注解,专门用来聚焦测试JPA相关组件(比如Repository、Entity),默认情况下会自动配置一个嵌入式内存数据库,并且只会加载和JPA相关的Bean,不会启动完整的Spring Boot应用上下文。这就是为什么你加了@TestPropertySource却没生效的核心原因。

为什么@SpringBootTest能正常加载?

@SpringBootTest会加载完整的应用上下文,它会自动扫描并加载src/main/resources下的application.properties,所以你的配置能正常生效,但代价是测试启动速度会慢很多,毕竟加载了整个应用的Bean。

解决方案:让@DataJpaTest正确读取你的配置

要让@DataJpaTest加载application.properties里的数据库配置,你需要做两件事:

  1. 禁用它默认的嵌入式数据库配置,这样才会使用你配置的真实数据库
  2. 确保配置文件能被上下文正确读取

修改后的测试类代码如下:

@RunWith(SpringRunner.class)
@DataJpaTest
@TestPropertySource(locations = "classpath:application.properties")
// 禁用默认的嵌入式数据库,使用配置文件里的数据库
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class EntityRepositoryTests {
    // 注入你的Repository进行测试
    @Autowired
    private YourEntityRepository repository;

    // 测试方法示例
    @Test
    public void testRepositoryOperation() {
        // ... 你的测试逻辑
    }
}

额外注意点

  • 如果你的application.properties里包含非JPA相关的配置(比如Redis、MQ的配置),@DataJpaTest依然不会加载这些配置对应的Bean,因为它只关注JPA切片。如果需要这些配置,要么改用@SpringBootTest,要么通过@Import手动导入需要的配置类。
  • 如果你使用的是Spring Boot 2.2+,@RunWith(SpringRunner.class)可以省略,直接用@DataJpaTest即可,它会自动使用Spring的测试运行器。

内容的提问来源于stack exchange,提问作者user09

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:26:19