spring 定义'bean'时遇到问题,“请考虑在配置中定义名为'entityManagerFactory'的bean”

ego6inou  于 2022-10-31  发布在  Spring
关注(0)|答案(2)|浏览(218)

试着运行我的Sping Boot 应用程序,我的编译器说;“找不到com.example.hello_world.UserService中的字段存储库所需的名为”entityManagerFactory“的Bean。
注射点具有以下注解:- @org.springframework.beans.工厂.注解.自动连线(必需=true)”
我是spring Boot 的新手,所以我不太确定为什么我的项目不能运行。我尝试了不同的注解,甚至使用“basePackages={“com.example.hello_world”}“,并在我的xml文件中添加不同的依赖项,但似乎没有任何效果。不太确定哪个文件是我的配置文件。M我的编译器

.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: 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);
        }
}

我的存储库文件用户Repository.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);
        }
}

我的控制器文件应用程序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";
    }
}
nukf8bse

nukf8bse1#

恐怕你做事的方式不好。
您希望有一个Sping Boot 应用程序,带有Controller和Repository。对于controller,您的配置似乎没问题,但对于Repository,则不太好。
1.在Hibernate和EclipseLink之间做出决定。您的项目中导入了这两种方法。如果您不打算使用EclipseLink,那么请相信我,删除它并使用Hibernate。
1.您没有在POM中导入好的依赖项。

<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>

给予看,结果告诉我。

fcwjkofz

fcwjkofz2#

我的情况也一样。我的问题是我忘了在我的application-dev.properties:unexclude DataSourceAutoConfiguration

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

相关问题