Не удается запустить весеннее загрузочное веб-приложение: невозможно запустить ServletWebServerApplicationContext из-за отсутствия компонента ServletWebServerFactory - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь запустить мое приложение 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;
    }
}

Мне нужны эти компоненты, потому что в одном из моих сервисов я внедряю следующие объекты:

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

Решения, которые я пробовал, но они не работали:

1) add расширяет SpringBootServletInitializer для обоих приложений. java и Appconfig. java

2) Переместите компоненты из the AppConfig. java to Application. java

3) Попытка установить следующую аннотацию для класса приложения:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

4) Добавление следующей зависимости в pom. xml:

org.springframework.boot spring-boot-starter-tomcat 2.2.5.RELEASE

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Вам необходимо переопределить метод конфигурации из SpringBootServletInitializer

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
}
0 голосов
/ 18 марта 2020

Мое решение: В дополнение к файлу постоянства. xml я создал файл application.properties: # URL-адрес подключения к базе данных spring.datasource.url = jdb c: postgresql: // ip: port / db spring.datasource.username = postgres spring.datasource.password = postgres spring.datasource.driver-class-name = org. postgresql .Driver spring.jpa.hibernate.ddl-auto = обновить spring.jpa.show- sql = истинно выбранная база данных 1010 * Я добавил следующие аннотации и расширил:

@SpringBootApplication
@EnableJpaRepositories("repositories")
@EntityScan("dao")
public class Application extends SpringBootServletInitializer {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...