Spring Boot测试环境无法加载TestConfig Bean问题求助
问题原因
你的TestConfig Bean未被加载,反而加载了NoConfig,核心原因有两点:
TestConfig缺少Spring Bean标识注解
你的TestConfig类仅标注了@ConditionalOnProperty和@Profile,但没有添加@Configuration或@Component这类Spring Bean的核心标识注解。Spring只会对带有这些标识注解的类进行条件判断和Bean实例化,所以即使TestConfig满足所有条件,也不会被Spring识别并创建。NoConfig的触发条件在test环境下成立
NoConfig的@ConditionalOnMissingBean(Config.class)注解表示:当容器中不存在Config类型的Bean时,就创建NoConfig。而Config类的@Profile("!test")导致test环境下Config不会被加载,因此容器中没有Config类型的Bean,NoConfig的条件被触发,最终被实例化。
解决步骤
1. 给TestConfig添加Bean标识注解
在TestConfig类上添加@Configuration(如果是配置类)或@Component(如果是普通Bean)注解,让Spring能够扫描并处理这个类:
@Configuration @ConditionalOnProperty(name = "key.enabled", matchIfMissing = true) @Profile("test") public class TestConfig {}
2. 调整NoConfig的条件(可选)
如果希望当TestConfig存在时,NoConfig不再被创建,可以修改NoConfig的@ConditionalOnMissingBean注解,把TestConfig也纳入判断范围:
@ConditionalOnMissingBean({Config.class, TestConfig.class}) public class NoConfig {}
3. 修正application.yaml的冗余配置(可选)
你的配置中spring.profiles.include重复添加了test,可以去掉重复项,优化为:
spring: profiles: active: test include: h2 key: enabled: on
内容的提问来源于stack exchange,提问作者jd466

