English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pacchettizzazione e distribuzione di Spring Boot su Tomcat remoto

Premessa

I progetti Spring Boot di solito eseguono internamente il server Tomcat o Jetty, raramente vengono distribuiti come pacchetto war su contenitori di servizi esterni, anche se messi in Linux, di solito si avvia direttamente la classe Application, ma a volte dobbiamo distribuire su server esterni, il che è un po' complicato per Spring Boot

Non faccio più troppe parole, vediamo insieme la presentazione dettagliata.

Dichiarazione dell'ambiente:

jdk: 1.8

Server: Alibaba Cloud, ubuntu 16.04

springBoot:1.5.9.RELEASE

Obiettivo

Pacchetto di SpringBoot su Tomcat del server remoto.

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>waibao</groupId>
 <artifactId>project</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>war</packaging>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.9.RELEASE</version>
 </parent>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <dependencies>
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>  
  <!-- 移除tomcat的支持,改成编译时支持 -->
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
  </dependency>
  <dependency>   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.1</version>
  </dependency>
  <!--非严格模式 -->
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  <!-- 配置thymeleaf的非严格模式,需要该依赖-->
  <dependency>   <groupId>net.sourceforge.nekohtml</groupId>
   <artifactId>nekohtml</artifactId>
   <version>1.9.22</version>
  </dependency>
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>
  <dependency>   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.1</version>
  </dependency>
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>6.0.6</version>
  </dependency>
  <!-- 阿里连接池-->
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.5</version>
  </dependency>
  <!-- fastJson -->
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.40</version>
  </dependency>
  <!-- Configurazione部署-->
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <version>1.5.9.RELEASE</version>
   <optional>true</optional>
   <scope>true</scope>
  </dependency>
 </dependencies>
 <build>
  <finalName>/testweb</finalName>
  <plugins>
   <plugin>    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
     <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

Attenzione

1、Il plugin maven non può utilizzare il plugin integrato di SpringBoot. Ho utilizzato questo plugin e ho ricevuto l'errore seguente

Impossibile eseguire l'obiettivo org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) sul progetto project: L'esecuzione dell'obiettivo default-jar di org.apache.maven.plugins:maven-jar-plugin:2.6:jar è fallita: È stata incontrata un'incompatibilità API durante l'esecuzione org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null

Modificare il plugin maven

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.4</version>
  <configuration>
   <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>

Occorre notare che, poiché non ho web.xml, ho aggiunto in eccesso

<configuration>  <failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>

2,

<build>
 <finalName>xxx</finalName>
</build>

finalName deve essere lo stesso del context-path in application.yml.

3, è necessario modificare la dipendenza di Tomcat in tempo di compilazione

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

4, la classe di ingresso di SpringBoot, eredita SpringBootServletInitializer e sovrascrive

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  return application.sources(MainApplication.class);
 }

MainApplication.class è la classe di ingresso di SpringBoot.

Pacchetto

Vai alla directory principale del progetto. Se stai usando IDEA, digita direttamente qui:

mvn clean package -DskipTests

Dopo la conclusione del pacchetto, verrà generato il file .war corrispondente nella cartella target del progetto.

Caricamento

Puoi semplicemente mettere il file war sotto webapps di Tomcat.

Problemi non risolti al momento:

Originariamente volevo creare direttamente un pacchetto jar. Poi avviare direttamente springBoot. Invece di fare il jar, continuavo a ricevere errori nella parte del plugin Maven. Dovevo creare un pacchetto war e caricarlo su Tomcat.

Se qualcuno ha risolto questo problema, fammi sapere.

In questo articolo, si dice che questo è un bug....

https://issues.apache.org/jira/browse/MSITE-724

Aggiornamento。。。。

Il problema è stato risolto. Puoi direttamente pacchettare springBoot in un Jar e eseguirlo.

Ragione:

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

L'esempio ufficiale fornito da springBoot utilizza questo plugin.

Maven scaricherà automaticamente la versione 2.4 e la versione 2.6 del maven-jar-plugin.

Maven dipenderà per default dalla versione 2.6. All'inizio non ho notato l'errore del progetto riportato, l'errore del maven-jar-plugin 2.6jar non è compatibile. Questo ha portato a non trovare l'errore..

Ossia, la versione 2.6 non è compatibile. Basta modificarla manualmente in versione 2.4. Ecco come fare:

<plugins>
   <plugin>    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
   <plugin>    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
   </plugin>
</plugins>

Sommario

Questo è tutto il contenuto dell'articolo, speriamo che il contenuto di questo articolo abbia un valore di riferimento per lo studio o il lavoro di tutti. Se hai domande, puoi lasciare un messaggio per scambiare opinioni, grazie per il supporto del tutorial di urla.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è di proprietà del rispettivo proprietario, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume responsabilità per le relative responsabilità legali. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente i contenuti sospetti di violazione del copyright.

Ti potrebbe interessare