it-swarm.com.de

Stellen Sie Spring Boot für Tomcat bereit

Ich bin also neu im Frühling - also dachte ich, ich würde Spring Boot ausprobieren

Ich verwende einen Maven zum Bauen. Ich habe eine Ansichtsanforderung eingerichtet, wenn "App" ausgeführt wird, als würde sie Tomcat selbst starten und ich habe einen Dienst am Standard 8080-Port. Wenn ich also localhost:8080/service anrufe, ist alles gut.

Wenn ich jedoch versuche, es als WAR zu verpacken, um es auf einem Server bereitzustellen, funktioniert es nicht

Also dachte ich, ich würde zurück zu den Grundlagen gehen und es lokal auf meinem Tomcat-Server installieren und sehen, was passiert

Zuerst geschah nichts - 404 - ein bisschen googeln, als ich herausfand, dass ich einen Web-Einstiegspunkt wie diesen hinzufügen muss - hier ist meine Hauptklasse

@ComponentScan
@EnableAutoConfiguration
public class App extends SpringBootServletInitializer
{

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(appClass);
    }

    private static Class<App> appClass = App.class;
}

so sah es aus, als hätte es funktioniert, in der Konsole konnte ich den roten Starttext von Catalina sehen, dann sah ich den Spring-Startvorgang (den ich vorher nicht gesehen hatte) 

wenn ich jedoch den Dienst localhost:8080/service anrufe und anrufe, bekomme ich immer noch eine 404

wenn ich es als "App" betreibe, funktioniert es sehr gut

gibt es etwas offensichtliches, was ich tun muss? den Krieg zu schaffen, ich gerade

  1. pom xml-Pakettyp in war geändert
  2. die Überschreibung wurde im obigen Code-Snippet eingefügt
  3. als Krieg exportiert

ich habe das WAR entpackt und es sah gut aus - es gibt ein WEB-INF und eine Reihe von Abhängigkeiten usw.

jede Hilfe wäre gut - da jemand ähnliche Probleme hatte, wenn Spring Boot-Apps als WARs bereitgestellt wurden?

***AKTUALISIEREN****

Jetzt kann ich meinen Krieg dazu bringen, mich auf meinem lokalen Tomcat 7-Server korrekt bereitzustellen - aber wenn ich versuche, einen extern gehosteten Tomcat-Container bereitzustellen, bekomme ich es 

at       org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.Java:175)
at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5262)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
... 15 more
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
SEVERE: Error deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/cookpot
Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cookpot]]
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:898)
at org.Apache.catalina.core.ContainerBase.access$000(ContainerBase.Java:130)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:153)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:142)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:869)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:615)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1095)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1617)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:619)
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/examples
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/Host-manager
Jul 14, 2014 1:49:01 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/CookPot
Jul 14, 2014 1:49:02 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/CookPot/WEB-INF/lib/Tomcat-embed-core-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Jul 14, 2014 1:49:02 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/CookPot/WEB-INF/lib/Tomcat-embed-el-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
Jul 14, 2014 1:49:06 PM org.Apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start:
org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CookPot]]
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:154)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:895)
at org.Apache.catalina.core.ContainerBase.access$000(ContainerBase.Java:130)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:153)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:142)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:869)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:615)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1095)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1617)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:619)
Caused by: Java.security.AccessControlException: access denied (Java.util.PropertyPermission Java.awt.headless write)
at Java.security.AccessControlContext.checkPermission(AccessControlContext.Java:323)
at Java.security.AccessController.checkPermission(AccessController.Java:546)
at Java.lang.SecurityManager.checkPermission(SecurityManager.Java:532)
at Java.lang.System.setProperty(System.Java:727)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:263)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.Java:130)
at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.Java:89)
at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.Java:51)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.Java:175)
at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5262)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
... 15 more
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
SEVERE: Error deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/CookPot
Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CookPot]]
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:898)
at org.Apache.catalina.core.ContainerBase.access$000(ContainerBase.Java:130)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:153)
at org.Apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.Java:142)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:869)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:615)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1095)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1617)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:619)
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/ROOT
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/manager
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/docs
Jul 14, 2014 1:49:06 PM org.Apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/shared/Tomcat/thecookpot/webapps/Cookpot
Jul 14, 2014 1:49:06 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/Cookpot/WEB-INF/lib/Tomcat-embed-core-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Jul 14, 2014 1:49:06 PM org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/shared/Tomcat/thecookpot/webapps/Cookpot/WEB-INF/lib/Tomcat-embed-el-7.0.52.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
Jul 14, 2014 1:49:09 PM org.Apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-6350"]
Jul 14, 2014 1:49:09 PM org.Apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-4350"]
Jul 14, 2014 1:49:09 PM org.Apache.catalina.startup.Catalina start
INFO: Server startup in 17529 ms
29
philthomas26

Das Kapitel Packbare ausführbare Jar- und War-Dateien in der Spring Boot-Referenzdokumentation lautet:

Um eine War-Datei zu erstellen, die sowohl ausführbar als auch implementierbar in einem externen Container ist, müssen Sie die Abhängigkeiten des eingebetteten Containers als "bereitgestellt" kennzeichnen, z.

<?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">
    <!-- ... -->
    <packaging>war</packaging>
    <!-- ... -->
    <dependencies>
        <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>
            <scope>provided</scope>
        </dependency>
        <!-- ... -->
    </dependencies>
</project>
35
James

Der folgende Code funktionierte gut für die Tomcat8-Bereitstellung ohne Tomcat-Abhängigkeit.

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan
public class ManufacturingRegionApplication extends SpringBootServletInitializer {

public static void main(String[] args) {
    new SpringApplicationBuilder(ManufacturingRegionApplication.class).application().run(args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
    return applicationBuilder.sources(application);
}

private static Class<ManufacturingRegionApplication> application = ManufacturingRegionApplication.class;

}

Die folgende Abhängigkeit ist nicht erforderlich.

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

 @RestController
 @RequestMapping(value = "/manufacturing-region-service")
 public class ManufacturingRegionService {

@Resource
private ManufacturingRegionDao manufacturingRegionDao;

@ResponseBody
@Transactional(readOnly = true)
@RequestMapping(value = "/region-codes/{abbr}", method = GET, produces = "application/json")

http: // localhost: 8080/Fertigungsregion-API/Fertigungsregion-Service/Regionscodes/ABBRVALUE

5
Sandeep M

Wenn wir uns für Spring Boot entscheiden, möchten wir keinen WAR erstellen. Von der root-Seite :

Spring Boot makes it easy to create stand-alone [...] 
Applications that can you can "just run".
Embed Tomcat or Jetty directly (no need to deploy WAR files)

BEARBEITET: Wenn der Zweck "Spring Boot" ist, empfehle ich, keine WAR-Datei zu generieren.

Wenn Sie wirklich eine WAR-Datei erstellen müssen (halten Sie den Code für SpringBoot erstellt und erzeugen Sie eine Datei, die Sie in jedem Standard-Servlet-Container ausführen können ...), sollten Sie die Dokumentation Konvertieren einer Spring Boot-JAR-Anwendung in eine WAR-Datei lesen .

Haben Sie Spring-Boot-Maven-Plugin in den Build-Prozess einbezogen? Sie haben diesen Schritt nicht beschrieben ...

0
mcoolive