Вопрос:

Spring Boot: невозможно запустить EmbeddedWebApplicationContext из-за отсутствия компонента EmbeddedServletContainerFactory

java spring spring-boot

307184 просмотра

26 ответа

835 Репутация автора

Я совершенно новичок в Spring и начал делать официальные руководства с этого сайта: https://spring.io/guides

Я хотел бы сделать это руководство: https://spring.io/guides/gs/scheduling-tasks/

Я получаю следующее исключение:

2014-02-14 16:25:21.614  INFO 9032 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.scheduling.annotation.SchedulingConfiguration' of type [class org.springframework.scheduling.annotation.SchedulingConfiguration$$EnhancerByCGLIB$$5b48d763] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2014-02-14 16:25:21.638  INFO 9032 --- [           main] .c.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/C:/work/Spring/SpringTutorial/target/classes/, file:/C:/work/apache-maven-3.0.3/repo/javax/servlet/javax.servlet-api/3.0.1/javax.servlet-api-3.0.1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter/1.0.0.RC1/spring-boot-starter-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot/1.0.0.RC1/spring-boot-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-context/4.0.0.RELEASE/spring-context-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-autoconfigure/1.0.0.RC1/spring-boot-autoconfigure-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-logging/1.0.0.RC1/spring-boot-starter-logging-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/jul-to-slf4j/1.7.5/jul-to-slf4j-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/log4j-over-slf4j/1.7.5/log4j-over-slf4j-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar, file:/C:/work/apache-maven-3.0.3/repo/ch/qos/logback/logback-core/1.0.13/logback-core-1.0.13.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-web/1.0.0.RC1/spring-boot-starter-web-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-tomcat/1.0.0.RC1/spring-boot-starter-tomcat-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/apache/tomcat/embed/tomcat-embed-core/7.0.47/tomcat-embed-core-7.0.47.jar, file:/C:/work/apache-maven-3.0.3/repo/org/apache/tomcat/embed/tomcat-embed-logging-juli/7.0.47/tomcat-embed-logging-juli-7.0.47.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-web/4.0.0.RELEASE/spring-web-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-aop/4.0.0.RELEASE/spring-aop-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-beans/4.0.0.RELEASE/spring-beans-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-webmvc/4.0.0.RELEASE/spring-webmvc-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-expression/4.0.0.RELEASE/spring-expression-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-databind/2.3.1/jackson-databind-2.3.1.jar, file:/C:/work/apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0.jar, file:/C:/work/apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-core/2.3.1/jackson-core-2.3.1.jar, file:/C:/work/apache-maven-3.0.3/repo/commons-lang/commons-lang/2.2/commons-lang-2.2.jar]
Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:140)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:124)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:658)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:355)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:920)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:909)
    at hu.kumite.Application.main(Application.java:17)
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:190)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:163)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137)
    ... 7 more

Класс начального уровня приложения такой:

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

Как видите, метод main содержит закомментированную строку. Я уже сделал учебник, а именно этот: https://spring.io/guides/gs/consuming-rest/ Он запущен и работает. Но я не могу запустить приложение ScheduledTasks, а именно:

@EnableScheduling
public class ScheduledTasks {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("The time is now " + dateFormat.format(new Date()));
    }
}

Я использую Eclipse и запускаю файл Application.java как приложение. Может ли кто-нибудь помочь мне?

Автор: Kumite Источник Размещён: 14.02.2014 03:35

Ответы (26)


60 плюса

43090 Репутация автора

Решение

Руководство по планированию не является веб-приложением, поэтому, возможно, в вашем файле pom.xml есть руководство по REST? Если вы будете внимательно следовать инструкциям, это должно сработать. Другая потенциальная проблема с кодом, который вы разместили выше, заключается в том, что ваш @EnableAutoConfigurationкласс не используется в контексте, а только в качестве основного метода (что, возможно, не является проблемой для руководства по планированию, но, вероятно, для многих других).

Автор: Dave Syer Размещён: 14.02.2014 03:53

22 плюса

765 Репутация автора

Попробуй это

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
       SpringApplication.run(ScheduledTasks.class, args);
    }
}
Автор: Ahmad AlMughrabi Размещён: 19.12.2014 09:34

45 плюса

451 Репутация автора

Сканирование @SpringBootApplicationшоу, которое включает в себя следующие аннотации:

@Configuration
@ComponentScan
@EnableAutoConfiguration

Таким образом, вы могли бы сделать это тоже:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
       SpringApplication.run(ScheduledTasks.class, args);
    }
}
Автор: HClark Размещён: 05.10.2015 04:32

10 плюса

2395 Репутация автора

добавлять

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
Автор: Sagar Размещён: 02.02.2016 10:14

4 плюса

515 Репутация автора

У меня были похожие проблемы, когда основной метод находится в другом классе, чем тот, который был передан SpringApplcation.run ()

Поэтому решение было бы использовать закомментированную строку:

public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Автор: afaulconbridge Размещён: 21.02.2016 08:33

27 плюса

596 Репутация автора

используйте это в вашем pom.xml:

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

или этот:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Автор: Pasha Gharibi Размещён: 03.03.2016 08:04

2 плюса

47 Репутация автора

Если вы успешно запустили его с помощью командной строки gradle bootRun, упаковав его с командной строкой gradle jarв jar-файл, чтобы запустить его с командной строкой java -jar build/libs/demo.jar, к сожалению, это не удалось с исключением: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory beanв этом случае вам нужно использовать задачу bootRepackageплагина gradle spring-bootдля генерации специального бегущая банка.

  • настройка 1

    $ gradle clean bootRepackage

  • настройка 2

    $ java -jar build / libs / demo.jar

Автор: Binhong Wu Размещён: 28.05.2016 08:11

3 плюса

71 Репутация автора

Если вы упаковали его как один jar, и это не веб-приложение, попробуйте загрузить контекст приложения, как показано ниже.

@SpringBootApplication

ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class);

Или используйте плагин ниже, чтобы упаковать его в одну банку

             <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

вы можете указать внешние конфиги, используя команду ниже для запуска

java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

/ http://docs.spring.io/spring-boot/docs/current/reference/htmlboot-features-external-config.html#boot-features-external-config-application-property-files

Обратите внимание, что если вы передаете свойства в качестве аргументов, не включайте @PropertySource("classpath:test.properties")их, это переопределит параметры

Автор: Pavan Kumar Patil Размещён: 17.06.2016 12:26

18 плюса

243 Репутация автора

Ошибка предполагает, что приложение, которое вы пытаетесь запустить, не может создать экземпляр apache tomcat. Убедитесь, что вы запускаете приложение с tomcat.

если после проверки всех ваших зависимостей у вас возникла та же проблема, попробуйте добавить следующее в ваш класс конфигурации

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory factory = 
                  new TomcatEmbeddedServletContainerFactory();
    return factory;
 }

Если вы используете внешний экземпляр tomcat (особенно для intellij), проблема может заключаться в том, что IDE пытается запустить встроенный tomcat. В этом случае удалите из файла pom.xml следующее, а затем настройте внешний tomcat с помощью мастера «Редактирование конфигураций».

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-tomcat</artifactId>
     <scope>provided</scope>
</dependency> 
Автор: Thomas Mwania Размещён: 24.06.2016 08:33

2 плюса

101 Репутация автора

А SpringApplicationпопытается создать правильный тип от ApplicationContextвашего имени. По умолчанию, AnnotationConfigApplicationContextили AnnotationConfigEmbeddedWebApplicationContextбудет использоваться, в зависимости от того , вы разрабатываете веб - приложение или нет.

Алгоритм, используемый для определения «веб-среды», довольно упрощен (основан на наличии нескольких классов). Вы можете использовать, setWebEnvironment(boolean webEnvironment)если вам нужно переопределить значение по умолчанию.

Также возможно получить полный контроль над ApplicationContextтипом, который будет использоваться при вызове setApplicationContextClass(…​).

[Подсказка] Часто желательно вызывать setWebEnvironment(false)при использовании SpringApplicationв тесте JUnit.

Автор: leimbag Размещён: 30.09.2016 04:09

16 плюса

3331 Репутация автора

У меня было несколько классов приложений в одном проекте Spring Boot, в котором была запущена сеть, и я хотел избежать настройки веб-среды для одного из них, поэтому я вручную настроил его, как показано ниже:

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(Application.class)
            .web(false)
            .run(args);
    }
}

ОБНОВЛЕНИЕ для Spring Boot 2 и выше:

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(Application.class)
            .web(WebApplicationType.NONE)
            .run(args);
    }
}
Автор: Robert Hunt Размещён: 18.10.2016 01:05

7 плюса

2830 Репутация автора

если вы столкнулись с этим исключением при использовании intellij и пытаетесь запустить приложение с помощью runкнопки. Попробуйте запустить приложение из командной строки. Например, убедитесь, что вы находитесь в правильном каталоге (каталог с вашим pom-файлом), предполагая, что это springbootприложение, которое запустило mvn spring-boot:runменя.

Кроме того, я также видел эту ошибку, когда ваше весеннее приложение зависит от другого приложения. В этом случае мне пришлось сначала запустить другое приложение, а затем запустить.

Автор: Marquis Blount Размещён: 23.10.2016 01:15

5 плюса

438 Репутация автора

Добавление аннотации @SpringBootApplicationДо того, как начальный класс исправил эту проблему для меня (поэтому, по сути, это сообщение об ошибке может означать «у вас нет @SpringBootApplicationотмеченного класса где-либо, вам нужен хотя бы один)

@SpringBootApplication
public class AppStarter {

    public static void main(String[] args) {
        SpringApplication.run(AppStarter.class, args);
    }
}
Автор: Ahmed Tawila Размещён: 22.01.2017 12:26

2 плюса

21 Репутация автора

Добавление зависимости стартера при загрузке исправило мою ошибку.

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

Это необходимо, если вы хотите запустить tomcat в качестве встроенного сервера.

Автор: Gulzar Hemani Размещён: 06.03.2017 05:16

1 плюс

534 Репутация автора

В моем случае мы добавили аннотацию @Profile заново , чтобы игнорировать класс TestApplication в рабочем режиме и класс Application в тестовом режиме.

К сожалению, мы забыли добавить следующую строку в файлы application.properties:

spring.profiles.active=test
or
spring.profiles.active=production

Без этих настроек ни один профиль не был загружен, что вызвало не очень большую поговорку Spring Error.

Автор: hb0 Размещён: 16.03.2017 12:44

1 плюс

531 Репутация автора

Это должно быть вызвано проблемой зависимости, в общем, вам нужно проверить зависимость.

Автор: richard Размещён: 16.03.2017 02:24

1 плюс

51 Репутация автора

Проблема в этом классе:

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
    //SpringApplication.run(Application.class, args);
    SpringApplication.run(ScheduledTasks.class, args);
    }
}

Правильный способ запустить ваше приложение:

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
}
Автор: Paolo Mastinu Размещён: 29.06.2017 08:23

1 плюс

963 Репутация автора

Очистить хранилище является одним из возможных решений.

Windows -> удалить все подпапки в репозитории maven:

C: \ Users \ YourUserName.m2 \ хранилище

Автор: Sergey Chepurnov Размещён: 06.07.2017 10:47

2 плюса

21 Репутация автора

проверьте, существует ли ваш pom.xml

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

У меня была такая проблема ; Из-за отсутствия этой зависимости

Автор: chao.lv Размещён: 18.09.2017 07:42

0 плюса

840 Репутация автора

Проблема заключается в исключении начального Tomcat, я пытался исключить его и использовать vert.x, поэтому, когда я интегрировать с Spring Admin, начались проблемы

<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>
Автор: Armen Arzumanyan Размещён: 15.11.2017 08:17

0 плюса

1 Репутация автора

У меня было это исключение в следующей ситуации.

в моем ПОМе были свойства:

<properties>
    <java.version>1.8</java.version>
    <!-- The main class to start by executing java -jar -->
    <start-class>com.scmaer.java.microservice.Application</start-class>
    <cxf.version>3.1.5</cxf.version>
    <olingo.version>2.0.10</olingo.version>
    <spring.boot.version>1.4.7.RELEASE</spring.boot.version>
    <spring.boot.plugin.version>1.5.8.RELEASE</spring.boot.plugin.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <skipTests>false</skipTests>
</properties>

и имя и путь моего класса приложения ("start-class") были неправильными.

Автор: Igor Размещён: 10.01.2018 09:14

0 плюса

11 Репутация автора

Я застрял с той же проблемой. Как я не определил Main.class и следующие аннотации в Spring-Boot с использованием Maven:

@SpringBootApplication
public class Main {
    public static void main(String args[]){
        SpringApplication.run(Main.class, args);
    }
}
Автор: David Stiffen Размещён: 11.03.2018 02:41

0 плюса

1 Репутация автора

У меня была похожая проблема, и проблема была в испорченном файле JAV. В моем случае tomcat-embed-coreфайл jar был сломан. Поэтому я удалил его из репозитория Maven и обновил, чтобы загрузить снова.

Автор: rokwoon kim Размещён: 02.04.2018 02:03

0 плюса

329 Репутация автора

В моем случае это происходит после исключения папки ресурсов из pomследующего кода.

<resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>*/*.properties</exclude>
            </excludes>
        </resource>
</resources>

Комментируя этот код начал мой код.

Автор: Root Размещён: 26.04.2018 01:00

0 плюса

88 Репутация автора

Другая причина этой проблемы - повреждение файлов хранилища maven, поэтому вы можете использовать следующую команду для решения проблемы:

mvn dependency:purge-local-repository
Автор: Abdessattar NOISSI Размещён: 11.09.2018 09:37

0 плюса

55 Репутация автора

Возможно, вы пропустили @SpringBootApplication в своем классе начальной загрузки.

@SpringBootApplication открытый класс LoginSecurityAppApplication {

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

}

Автор: vishal thakur Размещён: 07.02.2019 10:46
Вопросы из категории :
32x32