在SpringBoot中找不到EntityManagerFactory

时间:2017-07-27 12:14:43

标签: java mysql spring-boot

我正在尝试使用MySQL和SpringBoot为员工创建登录。我使用内存数据库使我的代码工作,但是一旦我将代码切换到MySQL,它就停止了工作。这个项目是一个弗兰肯斯坦,所以我不确定我的一些组件是否可以一起工作。我不确定我的App类中是否需要所有注释......错误如下:

说明

Field employeeRepository in io.msela.springbootstarter.employee.EmployeeService 
required a bean named 'entityManagerFactory' that could not be found.

动作:

考虑在配置中定义名为'entityManagerFactory'的bean。

这是我的App类,它运行整个事情:

package io.msela;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import io.msela.springbootstarter.employee.EmployeeRepository;

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) //added for MySQL
@ComponentScan({"io.msela"})
@EntityScan("io.msela.springbootstarter")
@EnableJpaRepositories(basePackageClasses = EmployeeRepository.class)
public class EmployeeApiDataApplication {

    public static void main(String[] args) {
        SpringApplication.run(EmployeeApiDataApplication.class, args);
    }
}

这是XML文件和属性文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.msela</groupId>
    <artifactId>course-api-data</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>course-api-data</name>
    <description>Course API with Spring Data</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>

        <!-- <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <scope>runtime</scope>
        </dependency> -->


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

和专长:

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
spring.jpa.database-platform = org.hiberante.dialetct.MySQLSDialect
spring.datasource.driver-class-name = com.mysql.jdbc.Driver

entityManager应该在哪里?我应该如何考虑我的项目现在非常简单(有服务,控制,员工和应用程序类)

4 个答案:

答案 0 :(得分:2)

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) //added for MySQL课程中删除此行EmployeeApiDataApplication

@SpringBootApplication注释隐含地包含@EnableAutoConfiguration。此外,DataSourceAutoConfiguration是spring-boot实例化DataSource所必需的,HibernateJpaAutoConfiguration是实例化EntityManagerFactory所必需的。

看起来你已经包含了mysql:mysql-connector-java依赖项,这很好。如果最近添加了项目,请确保您已对项目进行了maven更新,以便将其添加到类路径中。

您的属性应如下所示

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

com.mysql.jdbc.Driver取决于mysql:mysql-connector-java依赖关系。

另外,请确保create-drop上的spring.jpa.hibernate.ddl-auto设置正确。您可以在https://stackoverflow.com/a/1689769/找到可能的值。

更新(在git检查之后):

  1. 我删除了针对EmployeeApiDataApplication的其他注释,只留下@SpringBootApplication。除非你确实有理由,否则你不需要这么多特异性。

  2. 我更新了application.properties以反映上面注明的更改。

  3. 我从UserRepository移除了方法并更新了UserService以处理这些更改。

  4. 我在这里创建了一个拉取请求https://github.com/MatejaSela/SpringBootEmployeeLogin/pull/1

    希望这有帮助。

答案 1 :(得分:0)

基于您的问题,我了解到,您正在寻求实现基本的Spring Boot JPA集成。

http://www.dineshonjava.com/2016/08/spring-data-jpa-using-in-spring-boot-application.html

这是您可以根据您的要求利用和定制的最佳工作示例。

在此示例中清楚地解释了每个步骤和非常单独的步骤。

答案 2 :(得分:0)

在我的代码中,它也像这样发生:

考虑在您的配置中定义一个名为“ entityManagerFactory”的bean。

当我将hibernate.jar(pop.xml)的版本从4. 最终版本更改为5. 最终版本时。 那没关系 也许主要问题是休眠的版本...

答案 3 :(得分:0)

检查您的版本: 我在“2.0.0.RELEASE”上遇到了同样的问题并将其更新为 2.4.2。
现在 pom 文件包含这个父关系:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> 
</parent>

接下来是所有其他依赖项:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>