2016-05-24 17 views
11

Sto provando a distribuire un'applicazione su heroku e ho riscontrato diversi problemi. L'applicazione sta funzionando nel mio IDE (IntelliJ), ma quando provo a farlo funzionare con "Heroku Procfile.windows -f locali" ottengo questo errore:L'applicazione Spring non si avvia a causa della mancanza del bean EmbeddedServletContainerFactory

11:30:03 PM web.1 | 2016-05-24 23:30:03.491 WARN 10368 --- [   main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: 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. 
11:30:03 PM web.1 | 2016-05-24 23:30:03.505 ERROR 10368 --- [   main] o.s.boot.SpringApplication    : Application startup failed 
11:30:03 PM web.1 | 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. 
11:30:03 PM web.1 |  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at cinemagic.main.App.main(App.java:27) [CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 | Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
11:30:03 PM web.1 |  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185) ~[CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158) ~[CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[CinemaMagic-1.0-SNAPSHOT-jar-with-dependencies.jar:1.0-SNAPSHOT] 
11:30:03 PM web.1 |  ... 8 common frames omitted 

Il procfile assomiglia a questo: web: java - bersaglio jar \ CinemaMagic-1.0-SNAPSHOT-jar-con-dependencies.jar

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>CinemaMagic</groupId> 
<artifactId>CinemaMagic</artifactId> 
<version>1.0-SNAPSHOT</version> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>cinemagic.main.App</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.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-security</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.0.4.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.2.5.RELEASE</version> 
    </dependency> 

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

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>3.2.3.RELEASE</version> 
    </dependency> 

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

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>4.0.4.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.2.5.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.0.4.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-jpamodelgen</artifactId> 
     <scope>provided</scope> 
    </dependency> 

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

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>1.9.4.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.flywaydb</groupId> 
     <artifactId>flyway-core</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.assertj</groupId> 
     <artifactId>assertj-core</artifactId> 
     <version>3.4.1</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
    </dependency> 

</dependencies> 

classe principale:

0.123.
@SpringBootApplication 
@ComponentScan("cinemagic") 
@EnableJpaRepositories("cinemagic.repositories") 
@EntityScan(basePackages = { "cinemagic.model"}) 
@EnableScheduling 
public class App extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter { 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/").setCachePeriod(0); 
    super.addResourceHandlers(registry); 
} 

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

} 

risposta

14

Gli starter lavorano con il framework anziché contro/attorno al framework. Le tue dipendenze sono un disastro e non stai usando il plugin corretto.

Prima rimuovere tutti i plug-in e sostituirli con il plug-in spring-boot-maven. (Vedi anche the reference guide per questo).

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

Ripulire le dipendenze e utilizzare le versioni corrette (gestite da Spring Boot).

<dependencies> 

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

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

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</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-data-jpa</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-jpamodelgen</artifactId> 
     <scope>provided</scope> 
    </dependency> 

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

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.flywaydb</groupId> 
     <artifactId>flyway-core</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.assertj</groupId> 
     <artifactId>assertj-core</artifactId> 
     <version>3.4.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
    </dependency> 

</dependencies> 

Infine la classe di applicazione è (un po ') imperfetto che non è necessario che molte annotazioni e si sta estendendo una classe primavera avvio config. Quello che stai tentando di fare nel tuo metodo sovrascritto è già fornito di default da Spring Boot. Quindi non c'è bisogno di farlo. Inoltre, inserisci la tua classe App nel pacchetto di livello superiore cinematic e tutto il resto verrà rilevato automaticamente.

@SpringBootApplication 
@EnableScheduling 
public class App 

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

} 

Ora ricostruisci il tuo barattolo e avvialo.

Nota: Il problema principale era il fatto che non si stesse utilizzando il plug-in Maven di Spring Boot ma si è tentato di farlo da soli.

+0

Questo l'ha risolto! Grazie! Terrò in mente di iniziare da un buon costruttore di maven da ora in poi :). –

0

Goto C: \ Users \ username.m2 \ repository \ org \ Spring Framework \ boot

e cancellare la primavera-boot-autoconfigurazione e costruire di nuovo il Maven.

Funzionerà che verrà generato nuovamente.

Problemi correlati