com.demo.service.NmpAppService 中构造函数的参数 0 需要一个名为 'entityManagerFactory' 的 bean,但找不到

Parameter 0 of constructor in com.demo.service.NmpAppService required a bean named 'entityManagerFactory' that could not be found

我正在尝试 运行 一个简单的 api 流 java spring 并且我收到以下错误:

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

Description:

Parameter 0 of constructor in com.nmp.bts.webapps.bsc.btbsc.service.NmpAppService required a bean named 'entityManagerFactory' that could not be found.


Action:

Consider defining a bean named 'entityManagerFactory' in your configuration.> 
<Oct 25, 2019 10:37:51 AM EEST> <Notice> <Stdout> <BEA-000000> <WARN: The method class org.apache.commons.logging.impl.SLF4JLogFactory#release() was invoked.> 
<Oct 25, 2019 10:37:51 AM EEST> <Notice> <Stdout> <BEA-000000> <WARN: Please see http://www.slf4j.org/codes.html#release for an explanation.> 
<Oct 25, 2019 10:37:51 AM EEST> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID "48455312047066616" for task "216" on [partition-name: DOMAIN]. Error is: "weblogic.application.ModuleException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available"
weblogic.application.ModuleException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver.next(ModuleStateDriver.java:237)
    at weblogic.application.internal.flow.ModuleStateDriver.next(ModuleStateDriver.java:232)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    Truncated. see log file for complete stacktrace
Caused By: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
    Truncated. see log file for complete stacktrace

我想说的是,我尝试了从 Whosebug 上的其他类似主题开始的各种方法,以更改依赖关系,但对我没有任何效果。

控制器class:NmpAppController.java

@RestController
@RequestMapping("/api")
public class NmpAppController {

    private final NmpAppService nmpAppService;

    @Autowired
    public NmpAppController(NmpAppService nmpAppService) {
        this.nmpAppService = nmpAppService;
    }

    @GetMapping("/nmp-apps")
    public List<NmpApp> getAllNmps() {
        try {
            return nmpAppService.getAllNmpApps();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

服务class:NmpAppService.java

@Service
public class NmpAppService {

    private final NmpAppRepository nmpAppRepository;

    public NmpAppService(NmpAppRepository nmpAppRepository) {
        this.nmpAppRepository = nmpAppRepository;
    }

    public NmpApp save(final NmpApp nmpApp) {

        final NmpApp nmpAppToBeSaved = nmpApp;
        NmpApp result = nmpAppRepository.saveAndFlush(nmpAppToBeSaved);
        return result;
    }

    public NmpApp update(final NmpApp nmpApp) {

        final NmpApp nmpAppitToBeSaved = nmpApp;
        NmpApp result = nmpAppRepository.saveAndFlush(nmpAppToBeSaved);
        return result;
    }

    public List<NmpApp> getAllNmpApps() {
        return nmpAppRepository.findAll();
    }

存储库 class:NmpAppRepository.java

@Repository
public interface NmpAppRepository extends JpaRepository<NmpApp, Long> {

}

域 class NmpApp.java

@Entity
@Table(name = "NMP_APP")
public class NmpApp {

    @Id
    @Column(name = "SEQ_NO")
    private Long seqNo;

    @Column(name = "HIST_DATE")
    private Long histDate;

    public NmpApp() {
    }

    public NmpApp(Long seqNo, Long histDate) {
    this.seqNo = seqNo;
    this.histDate = histDate;
    }

    public Long getSeqNo() {
        return seqNo;
    }

    public void setSeqNo(Long seqNo) {
        this.seqNo = seqNo;
    }

    public Long getHistDate() {
        return histDate;
    }

    public void setHistDate(Long histDate) {
        this.histDate = histDate;
    }

pom.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>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.nmp.bts.webapps.bsc</groupId>
    <artifactId>nm-app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bt-bsc</name>
    <description>BSC</description>
    <packaging>war</packaging>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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>
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-data-jdbc</artifactId>-->
        <!--</dependency>-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Spring 引导主 class: Application.java

@EnableTransactionManagement
@SpringBootApplication(exclude = {HibernateJpaAutoConfiguration.class})
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.getSessionCookieConfig().setHttpOnly(false);
        super.onStartup(servletContext);
    }

}

稍后编辑:我上传了 application.properties 文件

#Basic Spring Boot Config for Oracle
spring.datasource.url= jdbc:oracle:thin:@//:/
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.jndi-name=jdbc/DEV_ADF_APPLDS
#hibernate config
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.main.allow-bean-definition-overriding=true

我希望能够通过 swagger api 调用程序对数据库执行简单的 CRUD 操作(代码仅显示 getAll 但我确实有其余代码)。

代替spring-boot-starter-data-rest,尝试使用以下

"org.springframework.boot:spring-boot-starter-data-jpa"
"org.springframework.boot:spring-boot-starter-jdbc"

稍后编辑:另外,不要忘记在 spring boot main class 或数据库配置 class

上添加 @EnableTransactionManagement

通常在 Spring 缺少 spring-boot-starter-data-jpa 时发生,因为 Spring 从 Spring Data JPA 推断出 EntityManager,后者具有 [=15= 的现成实现]. 将以下内容添加到项目 pom.xml 通常可以解决此问题

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

但在您的情况下可用,因此有问题的代码是

spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

改为

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect