尽管是明确的,但 Spring Boot 加载了错误的配置

Springboot loading wrong config despite being explicit

我有以下配置类,一个在主包中,一个在测试包中。

主要

@Configuration
public class DynamoConfiguration {

测试

@TestConfiguration
public class DynamoTestConfiguration {

单元测试

@ActiveProfiles(profiles = "test")
@ContextConfiguration(classes = {DynamoTestConfiguration.class})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest
public class DynamoClientTest {

然而,它仍在加载 DynamoConfiguration 并在我只想加载 DynamoTestConfiguration 时导致失败。我怎样才能确保发生这种情况?

当使用 @SpringBootTest 时,您的应用程序将与类路径上的任何 @Configuration 类 一起启动。 Spring 不知道 DynamoConfiguration 是特殊的,你不想加载它。

作为解决此问题的方法,您可以使用配置文件:

@Profile("prod")
@Configuration
public class DynamoConfiguration {

并在您的测试中,将 !prod 添加到您的 @ActiveProfiles:

@ActiveProfiles(profiles = "!prod,test")
@ContextConfiguration(classes = {DynamoTestConfiguration.class})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest
public class DynamoClientTest {

这应该避免 DynamoConfiguration 在测试中加载。