it-swarm.com.de

Spring Application wird nicht gestartet, da die Bean EmbeddedServletContainerFactory nicht vorhanden ist

Ich versuche, eine Anwendung auf Heroku zu implementieren und kam an mehreren Problemen vorbei. Die Anwendung arbeitet in meiner IDE (Intellij), aber wenn ich versuche, sie mit "heroku local -f Procfile.windows" auszuführen, erhalte ich diesen Fehler:

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

Die Datei sieht folgendermaßen aus: web: Java-Ziel\CinemaMagic-1.0-SNAPSHOT-jar-with-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>

Hauptklasse:

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

}
12
Olaru Vlad

Für Anfänger arbeiten Sie mit dem Framework statt gegen/um das Framework herum. Ihre Abhängigkeiten sind ein Chaos und Sie verwenden nicht das richtige Plugin. 

Entfernen Sie zunächst alle Plugins und ersetzen Sie sie durch das spring-boot-maven-Plugin. (Siehe auch das Referenzhandbuch dazu).

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

Bereinigen Sie als Nächstes Ihre Abhängigkeiten und verwenden Sie die richtige (von Spring Boot verwaltete) Version. 

<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>

Schließlich ist Ihre Anwendungsklasse (etwas) fehlerhaft, Sie brauchen nicht so viele Anmerkungen und Sie erweitern eine Spring Boot-Konfigurationsklasse. Was Sie in Ihrer überschriebenen Methode tun möchten, wird von Spring Boot bereits standardmäßig bereitgestellt. Das ist also nicht nötig. Fügen Sie einfach Ihre App-Klasse in das cinematic-Paket der obersten Ebene ein, und alles andere wird für Sie erkannt.

@SpringBootApplication
@EnableScheduling
public class App 

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

}

Bauen Sie jetzt Ihr Glas neu auf und starten Sie es. 

Hinweis: Das Hauptproblem war die Tatsache, dass Sie das Spring Boot Maven-Plugin nicht verwendet haben, dies aber selbst versucht haben. 

13
M. Deinum

Wechseln Sie zu C:\Users\Benutzername.m2\Repository\org\springframework\boot

und lösche die Spring-Boot-Autokonfiguration und baue deinen Maven erneut. 

Es wird funktionieren, es wird wieder erzeugt.

0
Akon