2016-09-18 10 views
0

У меня есть приложение загрузки демо-пружинной следующей направляющей https://spring.io/guides/gs/rest-service/«Невозможно запустить встроенный контейнер» после переключения с кота к причалу, Spring загрузочном

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

<?xml version="1.0" encoding="UTF-8"?> 
    <project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>cn.webank</groupId> 
    <artifactId>wemq-manager</artifactId> 
    <version>1.0-SNAPSHOT</version> 


    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.0.RELEASE</version> 
    </parent> 

    <dependencies> 


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


     <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> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
     </dependency> 




    </dependencies> 

    <properties> 
     <java.version>1.7</java.version> 
    </properties> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 




@SpringBootApplication 
@ComponentScan("cn.webank.wemqhttp") 
public class ServerStartup { 


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

Это бросает исключение после того, как я добавить фрагменты, которые переключают к причалу и запустить ServerStartup (Это прекрасно работает, прежде чем я пытаюсь переключиться на пирсе)

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:137) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:535) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at cn.webank.wemqhttp.boot.ServerStartup.main(ServerStartup.java:22) [classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_80] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_80] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) [idea_rt.jar:na] 
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:189) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:162) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    ... 13 common frames omitted 

PS: Поскольку класс запуска не является одним и тем же пакетом моих компонентов, поэтому я явно добавляю @ComponentScan в класс запуска.

+0

Зависимости и Bootstrap-Class выглядят прекрасно для меня. Можете ли вы предоставить полный pom.xml? Кстати. вы можете оставить «ComponentScan». Это часть 'SpringBootApplication' –

+0

@ DanielBubenheim - примечание - вы говорите, что он может удалить ComponentScan, однако зависит от того, как настроена его конфигурация (по умолчанию ComponentScan выбирает все из текущего пакета), возможно, он хочет, чтобы какая-то конфигурация была проигнорирована ? Во всяком случае, даже в этом случае я согласен с тем, что наилучшей практикой все равно было бы удалить ее и исправить/удалить любую нежелательную конфигурацию. – alexbt

+0

@Alex. Конечно, вы правы в отношении «ComponentScan» и упаковки. Но я хотел, чтобы этот пример был простым, чтобы избежать других проблем. Спасибо, что указали это явно! –

ответ

0

Добавьте следующую строку в ваш pom.xml:

<dependency> 
    <groupId>org.eclipse.jetty.aggregate</groupId> 
    <artifactId>jetty-all-server</artifactId> 
    <version>8.2.0.v20160908</version> 
</dependency> 

Вы также можете прокомментировать dependency с artifactId из spring-boot-starter-jetty.