【问题标题】:Java Spring Boot: Consider defining a bean named 'entityManagerFactory' in your configurationJava Spring Boot:考虑在配置中定义一个名为“entityManagerFactory”的bean
【发布时间】:2022-01-19 20:48:32
【问题描述】:

我正在使用 Java Spring Boot 开发一个基本应用程序,我遇到了这个错误:

这是错误信息:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-12-16 12:44:40.321 ERROR 5698 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 
***************************
APPLICATION FAILED TO START
***************************
Description:
Field userRepository in com.htamayo.sbcrashcourse.SbcrashcourseApplication required a bean named 'entityManagerFactory' that could not be found.
The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean named 'entityManagerFactory' in your configuration.
  1. 我的主课是这样的:

     package com.htamayo.sbcrashcourse;
    
     import com.htamayo.sbcrashcourse.lendingengine.domain.model.User;
     import com.htamayo.sbcrashcourse.lendingengine.domain.repository.UserRepository;
     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.boot.CommandLineRunner;
     import org.springframework.boot.SpringApplication;
     import org.springframework.boot.autoconfigure.SpringBootApplication;
     import org.springframework.context.annotation.Bean;
     import org.springframework.context.annotation.ComponentScan;
     import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    
     @SpringBootApplication
     @ComponentScan(basePackages = {"com.htamayo.sbcrashcourse.lendingengine"})
     @EnableJpaRepositories("com.htamayo.sbcrashcourse.lendingengine.domain.repository")
     public class SbcrashcourseApplication implements CommandLineRunner {
    
     @Autowired
     private UserRepository userRepository;
    
     public static void main(String[] args) {SpringApplication.run(SbcrashcourseApplication.class, args);}
    
     @Override
     public void run(String... args) throws Exception {
         userRepository.save(new User(1, "John", "B", 27, "Software Developer"));
         userRepository.save(new User(2, "Peter", "C", 21, "Pilot"));
         userRepository.save(new User(3, "Henry", "E", 21, "Unemployed"));
     }
    

    }

  2. UserRepository 类是这样的:

    package com.htamayo.sbcrashcourse.lendingengine.domain.repository;
    
     import com.htamayo.sbcrashcourse.lendingengine.domain.model.User;
     import org.springframework.data.jpa.repository.JpaRepository;
    
     public interface UserRepository extends JpaRepository<User, Long> {
    
     }
    
  3. 我的 pom.xml 看起来像这样:

     <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</groupId>
         <artifactId>spring-orm</artifactId>
     </dependency>
     <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
         <version>5.4.32.Final</version>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
         <version>5.3.9</version>
     </dependency>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>5.3.9</version>
     </dependency>
     <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
         <version>5.5.7.Final</version>
     </dependency>
     <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-entitymanager</artifactId>
         <version>5.5.7.Final</version>
     </dependency>
     <dependency>
         <groupId>javax.xml.bind</groupId>
         <artifactId>jaxb-api</artifactId>
         <version>2.3.1</version>
     </dependency>
    
    org.springframework.boot spring-boot-maven 插件

我一直在谷歌上寻找解决方案,但到目前为止一无所获,所以我的问题是:我不明白如何克服 EntityManagerFactory 错误,我是否缺少依赖项?还是我应该重构我的代码?有什么解决办法吗?

非常感谢您的建议。

【问题讨论】:

  • 您是否尝试过简化您的pom.xml 文件?在我看来,您导入了太多项目——其中一些项目已经包含在 Spring 的启动包中。请参阅 Spring Data 教程中的 this MySQL 示例。
  • 对于初学者来说,你的依赖是一团糟。抛弃所有休眠依赖项。删除 spring-webspring-webmvc 依赖项。在您的 @SpringBootApplication 注释类中删除 @ComponentScan@EnableJpaRepositories。然后使用--debug 重新启动您的应用程序以获取更多信息,并且堆栈跟踪会告诉您出了什么问题。你可能错误地配置了你的数据库。
  • 非常感谢,事实上,搜索这个错误我开始添加无法控制的依赖项,但问题仍然存在。我清理了我的 pom.xml,我将以调试模式启动应用程序,我会让你知道我得到了什么

标签: java spring spring-boot spring-mvc


【解决方案1】:

嗯,17 天后我终于找到了解决方案:

我的问题出在属性文件上,出于某种原因,我使用了这一行(我不记得为什么了): spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

我刚刚评论它并解决了问题。

经验教训:

  1. 始终记录您的代码
  2. JitterTed 的不和谐是很好的答案来源。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2017-11-14
    • 2019-01-27
    • 2022-09-28
    • 2019-12-05
    • 2017-07-19
    • 2017-05-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多