如何在Spring Boot测试中读取.env文件中的属性
在Spring Boot测试中加载.env文件的环境属性
问题原因
Spring Boot默认不会自动识别并加载.env文件,你在常规运行时通过运行配置指定了该文件,但测试环境下SpringBootTest初始化上下文时未加载对应的环境变量,导致无法解析${jdbc.url}占位符。
解决方案
方法1:使用spring-boot-dotenv第三方库(推荐)
这个库专门用于在Spring Boot中加载.env文件,配置简单:
添加测试依赖
在pom.xml(Maven)中添加依赖:<dependency> <groupId>me.paulschwarz</groupId> <artifactId>spring-boot-dotenv</artifactId> <version>2.1.0</version> <scope>test</scope> </dependency>修改测试类
在现有测试类上添加上下文初始化器,或者直接使用库提供的@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及以上版本:
创建测试配置文件
在src/test/resources下新建application-test.properties,添加配置:# 加载根目录的.env文件,optional表示文件不存在时不抛出异常 spring.config.import=optional:file:.env[.properties]激活测试配置
在测试类上添加@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
相关产品推荐
相关产品推荐

