EntityScan в проекте библиотеки нарушает автоматическую настройку SpringBootApplication - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать библиотеку с помощью Spring, которая будет управлять задачами для других приложений весенней загрузки.Моя библиотека включает в себя сервисы, репозитории и сущности.Библиотека будет использовать источник данных родительского проекта для сущностей.Моя цель - использовать библиотеку управления задачами в других проектах Spring, используя только аннотацию @EnableTask.

Для этого я подготовил свою библиотеку, и она работает, как я ожидал.Но когда я попытался импортировать эту библиотеку в приложение весенней загрузки, репозитории и сущности из библиотеки были недоступны.

Моя аннотация EnableTask:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(TaskConfig.class)
public @interface EnableTask {

}

И TaskConfig

@Configuration
@ComponentScan("com.cbidici.task")
public class TaskConfig {

}

Чтобы сделать репозитории из библиотеки зарегистрированными, я изменил свой класс конфигурации, как показано ниже.

@Configuration
@ComponentScan("com.cbidici.task")
public class TaskConfig {

    @Bean
    public TaskRepository taskRepository(EntityManager entityManager) {
        JpaRepositoryFactory jpaRepositoryFactory=new JpaRepositoryFactory(entityManager);
        return jpaRepositoryFactory.getRepository(TaskRepository.class);
    }

}

И это сработало ...

Теперь часть, в которой я все испортил!В этой конфигурации у меня есть исключение, что моя сущность Task не является управляемым типом.

Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.cbidici.task.entity.Task
    at org.hibernate.metamodel.internal.MetamodelImpl.managedType(MetamodelImpl.java:552) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:74) ~[spring-data-jpa-2.1.2.RELEASE.jar:2.1.2.RELEASE]

Чтобы зарегистрировать сущности, я попытался добавить EntityScan в мой класс TaskConfig.Это портит SpringBootApplication, и мой родительский проект не сканирует сущности сам по себе.

Я нашел эту проблему, и в ней есть обходное решение.https://github.com/spring-projects/spring-boot/issues/6141

Но это решение включает добавление @EnableJpaRepositories, @EntityScan в мой родительский проект, который я не хочу.

Я думаю, что мне нужно найти способ регистрации сущностей вбиблиотека вручную, как я делал для репозиториев, но я не смог.

...