我有一个启用了自动配置的Spring boot应用程序。我的应用程序分为4个模块:核心、模型、rest和存储库。存储库模块使用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);
}
}
我的存储库模块梯度文件:
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自动配置器会根据类路径类自动创建bean EntityManagerFactory,所以在给定注释的情况下一切都会正常工作。
更重要的是,自动配置日志显示HibernateJPA自动配置已匹配。
缺少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的接口
我做了一项研究,没有找到我的项目可能会错过的注释或依赖项。
您在RepositoryConfiguration
类中缺少@ComponantScan
。
下面是componentscan注释的重要说明。