У меня есть загрузочное приложение Spring с включенной автоконфигурацией.
Мое приложение разделено на 4 модуля: ядро, модель, отдых и хранилище.
Модуль репозитория использует данные Spring и Hibernate. Это модуль, который содержит все сущности классов и все репозитории данных Spring.
Проблема в том, что мое приложение не может найти EntityManagerFactory, который, по моему мнению, должен быть создан с помощью автоконфигурации на основе добавленной зависимости Hibernate.
Какую ошибку я получаю:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
вот моя основная конфигурация gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE")
}
}
plugins {
id 'java'
id 'idea'
id 'org.springframework.boot' version "2.1.0.RELEASE"
id 'io.spring.dependency-management' version "1.0.6.RELEASE"
id 'net.ltgt.apt' version '0.9'
}
group 'com.wat'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile project(':core')
compile project(':model')
compile project(':rest')
compile project(':repository')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.1.0.RELEASE'
compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
compile "org.mapstruct:mapstruct-jdk8:1.2.0.Final"
apt "org.mapstruct:mapstruct-processor:1.2.0.Final"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
allprojects {
apply plugin: "java"
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.2'
compile group: 'org.springframework', name: 'spring-context', version: '5.1.1.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.0.RELEASE'
compile "org.mapstruct:mapstruct-jdk8:1.2.0.Final"
compile "org.mapstruct:mapstruct-processor:1.2.0.Final"
}
}
мой основной класс
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Файл Gradle модуля репозитория:
plugins {
id 'net.ltgt.apt'
}
dependencies {
compile group: 'org.springframework.data', name: 'spring-data-jpa', version: '2.1.2.RELEASE'
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.3.7.Final'
compile 'mysql:mysql-connector-java:8.0.13'
compile project(":model")
testCompile group: 'junit', name: 'junit', version: '4.12'
}
и мой класс конфигурации модуля репозитория:
@Configuration
@EnableJpaRepositories(basePackages = "com.wat.zpm.repository")
@EnableTransactionManagement
@EnableAutoConfiguration
public class RepositoryConfiguration {
}
Согласно тому, что я обнаружил, Spring Autoconfigurer автоматически создает bean-компонент EntityManagerFactory на основе классов classpath, поэтому все должно работать с данными аннотациями.
Более того, в журнале автоконфигурации указано, что HibernateJpaAutoConfiguration
соответствует.
Класс, который пропускает EntityManagerFactory:
@Repository
public class UserRepositoryServiceImpl implements UserRepositoryService {
private final UserEntityMapper userMapper;
private final UserRepository userRepository;
public UserRepositoryServiceImpl(UserEntityMapper userMapper, UserRepository userRepository1) {
this.userMapper = userMapper;
this.userRepository = userRepository1;
}
}
UserRepository
- это интерфейс, расширяющий JpaRepository
Я провел исследование и не смог найти аннотации или зависимости, которые мой проект мог бы пропустить.