基于活动配置文件或yml属性值启用/禁用数据库连接

问题描述 投票:0回答:1

我希望我的应用程序在本地环境中启动时停止加载数据库连接,而在Dev环境中启动时使用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.}

为什么当我禁用bedbase自动配置时,带有@Repository批注的类未在Spring上下文中注册?即使在本地环境中启动时也没有数据库连接,如何阻止该应用程序启动失败?

java spring spring-boot couchbase spring-data-couchbase
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.