将Spring Boot 2.0.8升级到2.1.2-未能在测试中加载ApplicationContext
将spring从2.0.8升级到2.1.2(使用JDK 8)时,应用程序启动并运行良好,但测试失败,原因是将Spring Boot 2.0.8升级到2.1.2-未能在测试中加载ApplicationContext,spring,java-11,Spring,Java 11,将spring从2.0.8升级到2.1.2(使用JDK 8)时,应用程序启动并运行良好,但测试失败,原因是java.lang.IllegalStateException:未能加载ApplicationContext 我使用的是一个抽象类,有些测试确实扩展了它 @SpringBootTest @RunWith(SpringRunner.class) public abstract class AbstractTestkonfiguration { @TestConfiguration s
java.lang.IllegalStateException:未能加载ApplicationContext
我使用的是一个抽象类,有些测试确实扩展了它
@SpringBootTest
@RunWith(SpringRunner.class)
public abstract class AbstractTestkonfiguration {
@TestConfiguration
static class TestEnvironmentConfiguration {
@Component
@PropertySource(value = "classpath:my-test.properties")
@ConfigurationProperties(prefix = "my")
public static class MyTestProperties extends EnvironmentalProperties {
}
}
}
类EnvironmentalProperties是类型安全配置属性()的类
在升级成功之前,提供了一类环境属性,但现在我得到了一个
[...]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.abc.EnvironmentalProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1651)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1210)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
... 90 more
这可能与嵌套配置类检测()中的更改有关吗?如果是这样,我如何配置一个仅用于测试的EnvironmentalProperty bean
更新:即使按如下方式使用,也不起作用(结果相同)
你必须做一些改变
- 您尚未通过
@EnableConfigurationProperties
- 属性源需要在测试类中注入
- 删除
注释@组件
src/test/resources/my test.properties
my.server.name=foo
my.server=test
my.name=production
及
src/main/resources/application.properties
my.server.name=foo
my.server=test
my.name=production
生产配置
@ConfigurationProperties(prefix = "my")
@PropertySource(value = "classpath:application.properties")
public class EnvironmentalProperties {
private String name;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
这适用于Java11和SpringBoot2.1.2.0版本。请注意,这只是一个例子。您必须对其进行适当调整以适应您的项目。谢谢!这很有效。与本文中的第一个示例相比,我做了以下更改:a)在类级别添加了
@TestPropertySource(value={“classpath:my test.properties”}
和@enableConfiguration(AbstractTestKonConfiguration.TestenEnvironmentConfiguration.MyTestProperties.class)
。2) 我在configuration properties类中删除了@Component
和@PropertySource(value=“classpath:my test.properties”)
。但是,它在类测试环境配置
级别上无法与@EnableConfigurationProperties
一起工作。很高兴这有帮助。这是正确的@EnableConfigurationProperties
应该位于TestEnvironmentConfiguration
。顺便说一句,我提到了测试类上的@TestPropertySource
。