Включение / отключение подключения к базе данных на основе активного профиля или значения свойства yml - PullRequest
0 голосов
/ 09 мая 2020

Я хочу, чтобы мое приложение перестало загружать соединение с базой данных при запуске в локальной среде и использовало базу данных Couchbase при запуске в среде Dev. Итак, чтобы начать с этого, я исключил CouchbaseDataAutoConfiguration -

@SpringBootApplication(exclude= {CouchbaseDataAutoConfiguration.class})
@EnableAspectJAutoProxy()
public class ABCAdapterApplication {
    public static void main(String[] args) {
        SpringApplication.run(ABCAdapterApplication.class, args);
    }
}

и закомментировал @ Configuration из AbstractCouchbaseConfiguration class

//@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.}

Почему классы с @Repository аннотации не были зарегистрированы в контексте Spring, когда я отключил автоконфигурацию couchbase? Как я могу предотвратить сбой запуска этого приложения, даже если при запуске в локальной среде нет подключения к базе данных?

1 Ответ

0 голосов
/ 11 мая 2020

Существует класс обработчика, который на основе активного профиля создает экземпляр класса загрузчика данных ( FromFile или FromDatabase оба реализуют ConfigLoader i / f). Когда профиль не выбран, создается экземпляр FromFile, и этот класс не ссылается ни на какой класс или метод репозитория, поэтому он должен работать, даже если база данных не загружена. Я внимательно посмотрел и обнаружил, что KafkaPayloadRepository упоминается непосредственно в PersistDataProcessor . В этом варианте использования следует избегать прямой ссылки на классы репозитория, и вместо этого следует использовать интерфейс ConfigLoader .

...