it-swarm.com.ru

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

Я совершенно новичок в 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 как приложение . Кто-нибудь может мне помочь?

152
Kumite

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

60
Dave Syer

Сканирование @SpringBootApplication показывает, что оно включает следующие аннотации:

@Configuration
@ComponentScan
@EnableAutoConfiguration

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

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

используйте это в вашем 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>
28
Pasha Gharibi

Попробуй это

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

Ошибка предполагает, что приложение, которое вы пытаетесь запустить, не может создать экземпляр 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> 
18
Thomas Mwania

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

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

UPDATEдля Spring Boot 2 и выше:

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(Application.class)
            .web(WebApplicationType.NONE)
            .run(args);
    }
}
16
Robert Hunt

Добавлять 

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

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

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

7
Marquis Blount

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

@SpringBootApplication
public class AppStarter {

    public static void main(String[] args) {
        SpringApplication.run(AppStarter.class, args);
    }
}
5
Ahmed Tawila

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

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

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

Если вы упаковали его как один 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"), это переопределит параметры

3
Pavan Kumar Patil

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

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

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

2
chao.lv

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

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

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

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

2
leimbag

Если вы успешно запустили его с помощью командной строки 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 

2
Binhong Wu

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

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

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

2
Gulzar Hemani

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

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

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

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

1
hb0

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

1
richard

Очистить репозиторий это одно из возможных решений.

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

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

1
Sergey Chepurnov

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

@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);
    }
}
1
Paolo Mastinu

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

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

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

0
Root

Проблема заключается в исключении начального 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>
0
Armen Arzumanyan

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

@SpringBootApplication
public class LoginSecurityAppApplication {

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

}
0
vishal thakur

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

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

<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") были неправильными. 

0
Igor

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

0
rokwoon kim

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

mvn dependency:purge-local-repository
0
Abdessattar NOISSI

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

@SpringBootApplication
public class Main {
    public static void main(String args[]){
        SpringApplication.run(Main.class, args);
    }
}
0
David Stiffen