使用 Spring Boot 测试时不想加载 application.yml

ElA*_*rbi 3 spring-test spring-boot spring-boot-test

如何告诉 Spring 只加载 application-test.yml 而不是 application.yml 文件?

我有一个配置类:

@ActiveProfiles("test")
@SpringBootConfiguration

public class MongoTestConfig {

    @Autowired
    MongoOperations operations;
...
}
Run Code Online (Sandbox Code Playgroud)

和一个测试类:

@RunWith(SpringRunner.class)
@DataMongoTest
@SpringBootTest(classes = MongoTestConfig.class)
public class TagDefinitionRepositoryTest {
...
@Test
....
}
Run Code Online (Sandbox Code Playgroud)

我试图添加:

@TestPropertySource(locations = {"classpath:application-test.yml"})
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
Run Code Online (Sandbox Code Playgroud)

到我的配置类,但它不起作用:Spring 仍然加载 application.yml

HL'*_*REB 5

我认为你不能告诉 Spring Bootapplication.yml完全忽略。您可以做的是使用测试特定的属性文件覆盖所有不需要的属性。

根据您发布的代码片段, 中的任何属性都application-test.yml将覆盖 中的等效属性application.yml

Spring Boot 考虑application-test.yml特定于配置文件“test”(它比默认的 application.yml 具有更高的优先级)。不需要注释@TestPropertySource

但是,如果您想为属性文件选择另一个名称,则可以使用@TestProertySource,因为@TestProperySource参数中指示的文件比其他文件具有更高的优先级。

您可能想查看用于解析属性的Spring Boot外部配置规则