【问题标题】:Enabling/Disabling database connection on the basis of active profile or yml property value根据活动配置文件或 yml 属性值启用/禁用数据库连接
【发布时间】: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


【解决方案1】:

有一个基于活动配置文件的处理程序类实例化数据加载器类(FromFileFromDatabase 都实现 ConfigLoader i/f) .当没有选择配置文件时,FromFile 会被实例化,并且此类不引用任何存储库类或方法,这就是为什么即使尚未加载数据库它也应该工作的原因。我仔细看了看,发现 KafkaPayloadRepository 直接在 PersistDataProcessor 中引用。在此用例中必须避免直接引用存储库类,而应使用 ConfigLoader 接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2010-12-03
    • 1970-01-01
    • 2017-07-09
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多