Я пытаюсь создать библиотеку с помощью 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 в мой родительский проект, который я не хочу.
Я думаю, что мне нужно найти способ регистрации сущностей вбиблиотека вручную, как я делал для репозиториев, но я не смог.