这就是 SpringConfiguration 所做的
@Configuration
@Import({
DataLoad.class,
Security.class
})
@EnableConfigurationProperties(DataAPI.class)
@ConditionalOnProperty(name = "db.checkEnableed", havingValue = "true", matchIfMissing = true)
public class ApplicationConfiguration {
@Bean
DataLoadService checkDataLoad() {
return new DataLoadService();
}
}
所以我尝试按照提到的那样修改我的课程,它在 true 中工作正常
db.checkEnableed
属性。问题是如果 db.checkEnableed
为假,我的应用程序将无法启动,它会给出以下错误 Description: Parameter 0 of constructor in com.data.DataLoad required a bean of type DataAPI.class Action :- Consider defining a bean of type 'DataAPI' in your configuration.
所以这意味着即使 db.checkEnableed
为假,它仍然会尝试加载 @Import
注释中提到的类。任何人都可以帮助解决这个问题。谢谢
当
db.checkEnableed
为假或缺失时,我需要修复此异常。
当属性
db.checkEnableed
设置为false
或缺失时,ApplicationConfiguration
类不会被加载,因为@ConditionalOnProperty
注解。但是,DataLoad
注释中提到的 Security
和 @Import
仍将由 Spring 容器加载,这会导致您看到的错误。
您可以求助于将
@Conditional
注释与将禁用 ApplicationConfiguration
及其 @Import
ed 类型的编程条件配对:
@Configuration
@Import({
DataLoad.class,
Security.class
})
@EnableConfigurationProperties(DataAPI.class)
@Conditional(DbEnabledCondition.class)
public class ApplicationConfiguration {
@Bean
DataLoadService checkDataLoad() {
return new DataLoadService();
}
}
public class DbEnabledCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return Boolean.parseBoolean(context.getEnvironment().getProperty("db.checkEnableed", "true"));
}
}