java - 根据 Activity 配置文件或 yml 属性值启用/禁用数据库连接

标签 java spring spring-boot couchbase spring-data-couchbase

我希望我的应用程序在本地环境中启动时停止加载数据库连接,并在开发环境中启动时使用 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 上下文中注册?即使在本地环境中启动时没有数据库连接,如何阻止该应用程序启动失败?

最佳答案

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

关于java - 根据 Activity 配置文件或 yml 属性值启用/禁用数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61699506/

相关文章:

java - 如何将 FTP 服务器中的一个文件夹中的 CSV 文件移动到另一个文件夹?

java - 无法在基本类型 double 上调用 set Double(Double)

java - Spring 在使用 find 访问对象时是否应该启动事务?

java - Spring 启动: ReactiveCrudRepository is not being implemented by any bean

java - MySQL 查询将多行转换为一行

java - 从线程框架上拆下面板

java - 如何构建动态查询elasticsearch

java - Spring MVC 和 JUnit : Failed to load ApplicationContext

java - Spring中json中的斜杠是什么

java - 集成测试中 JsonDeserializer 的 Spring Boot Autowiring