【发布时间】:2020-05-09 15:47:51
【问题描述】:
我希望我的应用程序在本地环境中启动时停止加载数据库连接,并在开发环境中启动时使用 Couchbase 数据库。所以首先我排除了 CouchbaseDataAutoConfiguration -
@SpringBootApplication(exclude= {CouchbaseDataAutoConfiguration.class})
@EnableAspectJAutoProxy()
public class ABCAdapterApplication {
public static void main(String[] args) {
SpringApplication.run(ABCAdapterApplication.class, args);
}
}
并从 AbstractCouchbaseConfiguration 类中注释掉 @Configuration
//@Configuration
public class ABCAdapterBucketConnection extends AbstractCouchbaseConfiguration{
/* buckets configuration here*/
}
在此之后,我可以在日志中看到 Spring 没有加载任何数据库连接,但它给出了 org.springframework.beans.factory.UnsatisfiedDependencyException -
{"timestamp":"2020-05-09 15:31:37.073","severity":"WARN","class":"org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext","crId":"","msg":"Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ABCAdapterRetrySourceRoute': Unsatisfied dependency expressed through field 'dataProcessor'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'persistDataProcessor': Unsatisfied dependency expressed through field 'repo'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.vu.payments.abc.adapter.repositories.KafkaPayloadRepository' available: expected at least 1 bean which qualifies as autowire candidate.}
为什么当我禁用 couchbase 自动配置时,带有 @Repository 注释的类没有在 Spring 上下文中注册?即使在本地环境中启动时没有数据库连接,如何阻止此应用程序启动失败?
【问题讨论】:
-
ABCAdapterRetrySourceRoute可能对ABCAdapterBucketConnection有一些依赖。 -
附带说明,您为什么要实现这一目标?如果代码依赖于数据库,它应该会失败。访问 Couchbase 的代码将如何在本地工作?
-
您可以从 Spring 应用程序上下文中间接注入“KafkaPayloadRepository”,然后将条件逻辑置于存在状态。
标签: java spring spring-boot couchbase spring-data-couchbase