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

Empaquetar y desplegar Spring Boot en el servidor remoto Tomcat

前言

Spring Boot项目一般都是内嵌tomcat或者jetty服务器运行,很少用war包部署到外部的服务容器,即使放到linux中,一般也是直接启动Application类,但是有些时候我们需要部署到外部的服务器,这对于Spring Boot来说却有点麻烦

下面话不多说了,来一起看看详细的介绍吧。

环境声明:

jdk:1.8

服务器:阿里云,ubuntu 16.04

springBoot:1.5.9.RELEASE

目的

将springBoot 打包到远程服务器的tomcat中。

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>
  <!-- 热部署-->
  <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>

注意

1、maven 插件不能使用springBoot自带的插件。我使用这个插件报以下错误

Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) on project project: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null

modifique el plugin maven

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

Es importante destacar que, ya que no tengo web.xml, he añadido

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

2、

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

finalName debe coincidir con el contexto en application.yml-ruta debe coincidir.

3、debe cambiar la dependencia de tomcat a tiempo de compilación

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

4、la clase de entrada de springBoot, hereda SpringBootServletInitializer y sobrescribe

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

Dentro de MainApplication.class es la clase de entrada de springBoot.

Empaquetar

Ve al directorio raíz del proyecto. Si usas IDEA, simplemente ingresa aquí:

mvn clean package -DskipTests

Después de la finalización del empaquetado, se generará el archivo .war correspondiente en la carpeta target del proyecto.

Subir

Simplemente coloca el archivo war debajo de webapps en tomcat.

Problemas aún sin resolver:

Originalmente, quería crear directamente un paquete jar. Luego ejecutar springBoot directamente. Desafortunadamente, se convirtió en jar y siempre reportaba errores en la parte del plugin maven. Solo podía convertirse en war y subirse a tomcat.

Si alguien resuelve este problema, avísmelo.

En este artículo, dicen que es un bug...

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

Actualización……

El problema se ha resuelto. Puede打包 springBoot directamente en Jar y ejecutarlo.

Razón:

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

el ejemplo oficial proporcionado por springBoot, que utiliza este plugin.

Maven descargará automáticamente 2.4 versión y 2.6versión de maven-jar-plugin.

Mientras tanto, Maven por defecto dependerá 2.6versión. Al principio, no presté atención al error informado por el proyecto, que era maven-jar-plugin 2.6jar incompatibles. Esto lleva a que no se pueda encontrar el error.

es decir 2.6Incompatibilidad de versión. Simplemente manualmente, átalo a 2.4La versión es suficiente. Como se muestra a continuación:

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

Resumen

Este es el contenido completo del artículo. Espero que el contenido de este artículo tenga un valor de referencia para su aprendizaje o trabajo. Si tienen alguna pregunta, pueden dejar comentarios para intercambiar. Gracias por su apoyo a la教程 de clamor.

Declaración: El contenido de este artículo se ha obtenido de la red, pertenece a los propietarios originales, y el contenido se ha contribuido y subido por los usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará