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] .clClasspathLoggingApplicationListener : 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(Application.class, args); SpringApplication.run(ScheduledTasks.class, args); } } 

Как вы можете видеть, основной метод содержит прокомментированную строку. Я уже сделал учебник, а именно этот: 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 как приложение. Может кто-нибудь, пожалуйста, помогите мне?

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

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

 @Configuration @ComponentScan @EnableAutoConfiguration 

Поэтому вы тоже можете это сделать:

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

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

  org.springframework.boot spring-boot-starter-web  

или этот:

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

Попробуй это

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

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

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

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

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

   org.springframework.boot spring-boot-starter-tomcat provided  при   org.springframework.boot spring-boot-starter-tomcat provided  ,   org.springframework.boot spring-boot-starter-tomcat provided  

У меня было несколько classов приложений в одном проекте 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); } } 

Добавить

   org.springframework.boot spring-boot-starter-web  

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

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

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

Таким образом, решение будет заключаться в использовании строки, которую вы закомментировали:

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

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

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

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

 @SpringBootApplication ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class); 

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

   org.springframework.boot spring-boot-maven-plugin    repackage     

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

 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") он переопределит параметры

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

  • настройка 1

    $ gradle clean bootRepackage

  • настройка 2

    $ java -jar build / libs / demo.jar

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

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

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

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

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

  org.springframework.boot spring-boot-starter-web  

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

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

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

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

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

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

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

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

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

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

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

Clear repository – одно из возможных решений.

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

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

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

  org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-tomcat    

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

в моей POM были свойства:

  1.8  com.scmaer.java.microservice.Application 3.1.5 2.0.10 1.4.7.RELEASE 1.5.8.RELEASE UTF-8 false  

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

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

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

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

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

   src/main/resources true  */*.properties    

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

Давайте будем гением компьютера.