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

如何在Spring Boot测试中读取.env文件中的属性

在Spring Boot测试中加载.env文件的环境属性

问题原因

Spring Boot默认不会自动识别并加载.env文件,你在常规运行时通过运行配置指定了该文件,但测试环境下SpringBootTest初始化上下文时未加载对应的环境变量,导致无法解析${jdbc.url}占位符。

解决方案

方法1:使用spring-boot-dotenv第三方库(推荐)

这个库专门用于在Spring Boot中加载.env文件,配置简单:

  1. 添加测试依赖
    在pom.xml(Maven)中添加依赖:

    <dependency>
        <groupId>me.paulschwarz</groupId>
        <artifactId>spring-boot-dotenv</artifactId>
        <version>2.1.0</version>
        <scope>test</scope>
    </dependency>
    
  2. 修改测试类
    在现有测试类上添加上下文初始化器,或者直接使用库提供的@DotenvTest注解:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {App.class})
    @ContextConfiguration(initializers = DotenvContextInitializer.class)
    public class TestingWebApplicationTest {
    
        @Test
        public void contextLoads() {
        }
    
    }
    

    若.env文件不在项目根目录,可指定路径:

    @DotenvTest(location = "src/test/resources/.env.test")
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {App.class})
    public class TestingWebApplicationTest {
        // 测试代码
    }
    

方法2:通过Spring Boot原生配置加载(无需第三方库)

适用于Spring Boot 2.4及以上版本:

  1. 创建测试配置文件
    在src/test/resources下新建application-test.properties,添加配置:

    # 加载根目录的.env文件,optional表示文件不存在时不抛出异常
    spring.config.import=optional:file:.env[.properties]
    
  2. 激活测试配置
    在测试类上添加@ActiveProfiles注解:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {App.class})
    @ActiveProfiles("test")
    public class TestingWebApplicationTest {
    
        @Test
        public void contextLoads() {
        }
    
    }
    

    若.env文件在其他路径,修改file:后的路径即可,比如file:src/test/resources/.env。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:24:38