Spring Boot - Distribuzione Tomcat

Utilizzando l'applicazione Spring Boot, possiamo creare un file war da distribuire nel server web. In questo capitolo imparerai come creare un file WAR e distribuire l'applicazione Spring Boot nel server Web Tomcat.

Inizializzatore servlet Spring Boot

Il modo tradizionale di distribuzione è creare l'applicazione Spring Boot @SpringBootApplication classe estendere la SpringBootServletInitializerclasse. Il file di classe Spring Boot Servlet Initializer consente di configurare l'applicazione quando viene avviata utilizzando Servlet Container.

Il codice per il file di classe Spring Boot Application per la distribuzione di file JAR è fornito di seguito:

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

Dobbiamo estendere la classe SpringBootServletInitializerper supportare la distribuzione di file WAR. Il codice del file di classe dell'applicazione Spring Boot è fornito di seguito:

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class DemoApplication  extends SpringBootServletInitializer {
   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(DemoApplication.class);
   }
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

Impostazione della classe principale

In Spring Boot, dobbiamo menzionare la classe principale che dovrebbe iniziare nel file di build. A tale scopo, puoi utilizzare le seguenti parti di codice:

Per Maven, aggiungi la classe iniziale in pom.xml proprietà come mostrato di seguito -

<start-class>com.tutorialspoint.demo.DemoApplication</start-class>

Per Gradle, aggiungi il nome della classe principale in build.gradle come mostrato di seguito -

mainClassName="com.tutorialspoint.demo.DemoApplication"

Aggiorna la confezione di JAR in WAR

Dobbiamo aggiornare il JAR di imballaggio in WAR utilizzando le seguenti parti di codice:

Per Maven, aggiungi la confezione come WAR in pom.xml come mostrato di seguito -

<packaging>war</packaging>

Per Gradle, aggiungi il plugin dell'applicazione e il plugin war nel file build.gradle come mostrato di seguito -

apply plugin: ‘war’
apply plugin: ‘application’

Ora, scriviamo un semplice Rest Endpoint per restituire la stringa "Hello World from Tomcat". Per scrivere un Rest Endpoint, dobbiamo aggiungere la dipendenza di avviamento Web Spring Boot nel nostro file di build.

Per Maven, aggiungi la dipendenza di avvio di Spring Boot in pom.xml utilizzando il codice come mostrato di seguito -

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

Per Gradle, aggiungi la dipendenza di avvio di Spring Boot in build.gradle utilizzando il codice come mostrato di seguito -

dependencies {
   compile('org.springframework.boot:spring-boot-starter-web')
}

Ora scrivi un semplice Rest Endpoint nel file di classe Spring Boot Application utilizzando il codice come mostrato di seguito -

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication  extends SpringBootServletInitializer {
   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(DemoApplication.class);
   }
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
   
   @RequestMapping(value = "/")
   public String hello() {
      return "Hello World from Tomcat";
   }
}

Creazione del pacchetto dell'applicazione

Ora, crea un file WAR da distribuire nel server Tomcat utilizzando i comandi Maven e Gradle per impacchettare l'applicazione come indicato di seguito:

Per Maven, usa il comando mvn packageper confezionare la tua applicazione. Quindi, verrà creato il file WAR e puoi trovarlo nella directory di destinazione come mostrato negli screenshot riportati di seguito -

Per Gradle, usa il comando gradle clean buildper confezionare la tua applicazione. Quindi, il tuo file WAR verrà creato e puoi trovarlo sottobuild/libsdirectory. Osserva gli screenshot qui forniti per una migliore comprensione -

Distribuisci in Tomcat

Ora, esegui il server Tomcat e distribuisci il file WAR sotto webappsdirectory. Osserva gli screenshot mostrati qui per una migliore comprensione -

Dopo la corretta distribuzione, premi l'URL nel tuo browser web http://localhost:8080/demo-0.0.1-SNAPSHOT/ e osserva che l'output apparirà come mostrato nello screenshot riportato di seguito -

Il codice completo per questo scopo è fornito di seguito.

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>com.tutorialspoint</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>war</packaging>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>
   
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.8.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <start-class>com.tutorialspoint.demo.DemoApplication</start-class>
   </properties>

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

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

build.gradle

buildscript {
   ext {
      springBootVersion = '1.5.8.RELEASE'
   }
   repositories {
      mavenCentral()
   }
dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
apply plugin: 'application'

group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = "com.tutorialspoint.demo.DemoApplication"

repositories {
   mavenCentral()
}
dependencies {
   compile('org.springframework.boot:spring-boot-starter-web')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}

Di seguito è riportato il codice per il file di classe dell'applicazione Spring Boot principale:

package com.tutorialspoint.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication  extends SpringBootServletInitializer {
   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(DemoApplication.class);
   }
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
   
   @RequestMapping(value = "/")
   public String hello() {
      return "Hello World from Tomcat";
   }
}