麻烦定义“ bean”,“考虑在配置中定义一个名为“ entityManagerFactory”的bean”

时间:2020-02-08 18:58:46

标签: java spring hibernate spring-boot spring-mvc

尝试运行我的spring boot应用程序,编译器说; “ com.example.hello_world.UserService中的字段回购需要找不到名为'entityManagerFactory'的bean。

注入点具有以下注释: -@ org.springframework.beans.factory.annotation.Autowired(required = true)“

Spring Boot的新手,所以我不确定为什么我的项目没有运行。尝试使用不同的注释弄乱,甚至使用“ basePackages = {” com.example.hello_world“}”并向我的xml文件添加不同的依赖项,但似乎无济于事。不完全确定哪个文件是我的配置文件。 中号 我的编译器



  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-02-08 13:30:58.527  INFO 904 --- [           main] c.e.hello_world.HelloWorld1Application   : Starting HelloWorld1Application on LAPTOP-QBE4L7C0 with PID 904 (C:\Users\Tristan\eclipse-workspace\hello_world-1\target\classes started by Tristan in C:\Users\Tristan\eclipse-workspace\hello_world-1)
2020-02-08 13:30:58.530  INFO 904 --- [           main] c.e.hello_world.HelloWorld1Application   : No active profile set, falling back to default profiles: default
2020-02-08 13:30:58.914  INFO 904 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-02-08 13:30:58.962  INFO 904 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 39ms. Found 1 JPA repository interfaces.
2020-02-08 13:30:59.390  INFO 904 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-02-08 13:30:59.397  INFO 904 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-02-08 13:30:59.397  INFO 904 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.30]
2020-02-08 13:30:59.519  INFO 904 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-02-08 13:30:59.519  INFO 904 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 949 ms
2020-02-08 13:30:59.582  WARN 904 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appController': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userService': Unsatisfied dependency expressed through field 'repo'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Cannot create inner bean '(inner bean)#420745d7' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#420745d7': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
2020-02-08 13:30:59.584  INFO 904 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2020-02-08 13:30:59.657  INFO 904 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-02-08 13:30:59.728 ERROR 904 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field repo in com.example.hello_world.UserService 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.

我的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>hello_world-1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hello_world-1</name>
    <description>Demo project for Spring Boot</description>



    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>


    <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            </dependency>

        <!-- https://mvnrepository.com/artifact/org.eclipse.persistence/eclipselink -->
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.5.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.0.0.Alpha4</version>
            <type>pom</type>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>6.0.0.Alpha4</version>
            <type>pom</type>
        </dependency>

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

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

我的项目的第一个文件


    package com.example.hello_world;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;


@SpringBootApplication
@EnableJpaRepositories

public class HelloWorld1Application {

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

}

我的服务文件 UserService.Java


    package com.example.hello_world;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;


@Service

@EntityScan("com.example.hello_world")
@ComponentScan("com.example.hello_world")
public class UserService {

        @Autowired
        private UserRepository repo;

        public List<UserInfo> listAll()
        {
            return repo.findAll();
        }


        public void save(UserInfo User)
        {
            repo.save(User);
        }


        public UserInfo get(Long id)
        {
            return repo.findById(id).get();
        }

        public void delete(Long id)
        {
            repo.deleteById(id);
        }
}

我的存储库文件 UserRepository.jav


    package com.example.hello_world;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;



@Service

@EntityScan("com.example.hello_world")
@ComponentScan("com.example.hello_world")
public class UserService {

        @Autowired
        private UserRepository repo;

        public List<UserInfo> listAll()
        {
            return repo.findAll();
        }


        public void save(UserInfo User)
        {
            repo.save(User);
        }


        public UserInfo get(Long id)
        {
            return repo.findById(id).get();
        }

        public void delete(Long id)
        {
            repo.deleteById(id);
        }
}

我的控制器文件 App Controller.java


    package com.example.hello_world;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.util.List;
import org.springframework.ui.*;

@Controller
public class AppController
{

    @Autowired
    private UserService service;

    @RequestMapping("/")
    public String ViewHomePage(Model model)
    {
        List<UserInfo> listUserInfo = service.listAll();
        model.addAttribute("listUserInfo", listUserInfo);

        return "index";
    }
}


1 个答案:

答案 0 :(得分:1)

恐怕您做事的方式不是很好。

您想要一个带有Controller和Repository的Spring Boot应用程序。对于控制器,您的配置似乎可以,但是对于存储库,则不行。

  1. 在Hibernate和EclipseLink之间下定决心。您正在将两者都导入到项目中。如果您不打算使用EclipseLink,请相信我,将其删除并使用Hibernate。
  2. 您没有在POM中导入良好的依赖关系。在执行需要JPA配置的Spring Boot项目时,您必须使用此依赖项
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

如果不这样做,那么最终将缺少某些必填bean,例如entityManagerFactoryBean。确实,启动程序依赖项可以加载一堆AutoConfiguration类,如果要配置entityManagerFactoryBean,则可以加载一类。

这是我为您推荐的POM:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>hello_world-1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hello_world-1</name>
    <description>Demo project for Spring Boot</description>



    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </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-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

试试看,让我知道结果。