Java spring boot web app无法启动:由于缺少ServletWebServerFactory bean,无法启动ServletWebServerApplicationContext

Java spring boot web app无法启动:由于缺少ServletWebServerFactory bean,无法启动ServletWebServerApplicationContext,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我正在尝试启动spring boot web应用程序,但出现以下错误: 2020-03-17 20:54:22.643 WARN 15640 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.App

我正在尝试启动spring boot web应用程序,但出现以下错误:

2020-03-17 20:54:22.643  WARN 15640 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
2020-03-17 20:54:22.664 ERROR 15640 --- [           main] o.s.boot.SpringApplication               : Application run failed
我配置了以下ApplicationContext文件:

@Configuration
@EnableJpaRepositories(basePackages = {"repos"})
public class AppConfig  {
    @Bean
    public LocalEntityManagerFactoryBean entityManagerFactory() {
        LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
        factoryBean.setPersistenceUnitName("mydb");

        return factoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);

        return transactionManager;
    }
}
我需要这些bean,因为我在其中一个服务中注入了以下对象:

@Autowired
private EntityManagerFactory emf;

@PersistenceContext
private EntityManager em;
和我的主应用程序:

@SpringBootApplication
public class Application  extends SpringBootServletInitializer {


    public static void main(String[]args)
    {
        //load the spring config class we configured
        SpringApplication.run(AppConfig.class);
    }
pom.xml中的我的依赖项:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.1.Final</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.11</version>
        </dependency>
4) 将以下依赖项添加到pom.xml:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.1.Final</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.11</version>
        </dependency>
org.springframework.boot 弹簧启动机tomcat 2.2.5.1发布 我的解决方案: 除了persistence.xml文件之外,我还创建了application.properties文件: #数据库的连接url spring.datasource.url=jdbc:postgresql://ip:port/db spring.datasource.username=postgres spring.datasource.password=postgres spring.datasource.driver类名=org.postgresql.driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true 选定数据库 spring.jpa.properties.hibernate.dialogue=org.hibernate.dialogue.postgresql9dialogue spring.jpa.generate ddl=true server.port=9091

之后,在my Application.java中,我添加了以下注释并扩展:

@SpringBootApplication
@EnableJpaRepositories("repositories")
@EntityScan("dao")
public class Application extends SpringBootServletInitializer {

您需要重写SpringBootServletilizer中的configure方法

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

确保您的文件名、类名和SpringApplication.run()函数中的类名相同。 另外,请确保您没有忘记
@SpringBootApplication
注释。

现在上传图像,阅读