Spring Boot: настройка сканирования отсутствующих классов из-за «странной» настройки - PullRequest
0 голосов
/ 26 марта 2020

Мы настроили проект ETL в некотором беспорядке, просто чтобы выполнить работу:

Этот проект зависит от нескольких других проектов Spring, поэтому мы включили эти проекты в качестве зависимостей. Эти проекты содержат свои собственные классы @Configuration, которые могут вызвать конфликты. Сейчас я нахожусь в состоянии, когда я установил репозиторий Dynami c в моем проекте ETL, но он не подключается автоматически, что выдает ошибку:

конструктор в com.myetl.service.impl. ErrorServiceImpl требуется bean-компонент типа 'com.myetl.repository.ProjectErrorRepository', который не может быть найден.

Я вижу ранее в консоли при запуске приложения, что он обрабатывает его как репозиторий Redis. :

RepositoryConfigurationExtensionSupport: Spring Data Redis - не удалось безопасно определить назначение хранилища для интерфейса кандидата в репозиторий com.myetl.repository.ProjectErrorRepository. Если вы хотите, чтобы этот репозиторий был репозиторием Redis, рассмотрите возможность аннотирования ваших сущностей одной из следующих аннотаций: org.springframework.data.redis.core.RedisHa sh (предпочтительно) или рассмотрите возможность расширения одного из следующих типов с вашим репозиторием. : org.springframework.data.keyvalue.repository.KeyValueRepository.

У меня нет конфигурации Redis где-либо в моем базовом проекте, но она определенно есть в одной из моих зависимостей.

Я пробовал несколько разных вещей, но ничего не работает. Например, используя фильтр исключения:

@SpringBootApplication(exclude = {DifferentProjectConfiguration.class})
@ComponentScan(includeFilters =
               @ComponentScan.Filter(type= FilterType.REGEX,
                                     pattern = "com\\.etl\\..*"),
               excludeFilters =
               @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,
                                     value = {OtherProjectRedisConfiguration.class}))
public class ProjectsMigrationApplication {
...

Если я закомментирую репозиторий, приложение будет нормально загружаться, включая контроллеры и служебные компоненты. Эта проблема, кажется, только нацелена на репозиторий, которым я хочу быть репозиторий MySql JPA. Вот определение моего репозитория (я пробовал его с аннотацией @Repository и без нее):

package com.etl.repository;

import com.etl.domain.ProjectError;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

public interface ProjectErrorRepository extends PagingAndSortingRepository<ProjectError, Long> {

}

@Entity
@Table(name="project_error")
@Data
public class ProjectError {
    @Id
    @Column(name = "project_error_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column
    private String errMsg;

    @Column(name = "user_email")
    private String userEmail;
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "migrationEntityManagerFactory", basePackageClasses = {
        ProjectError.class}, repositoryBaseClass = ProjectErrorRepository.class)
public class ProjectMigrationJpaConfig {

    @Bean(name = "migrationEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean migrationEntityManagerFactory(EntityManagerFactoryBuilder builder,
            DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages(ProjectError.class)
                .build();
    }

}

Как лучше всего диагностировать этот тип ошибки в лабиринтном проекте чтобы понять, что делает весна за кулисами?

1 Ответ

0 голосов
/ 26 марта 2020

Звучит так, будто вы используете Redis как переходную зависимость от другого проекта. Вероятно, вы боретесь с автоконфигом.

Попробуйте исключить автоконфигурацию Redis из вашего проекта и посмотрите, что это делает.

    @SpringBootApplication(exclude = { RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...