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

Пакетирование и развертывание spring Boot на удаленном сервере Tomcat

Введение

Проекты Spring Boot обычно работают с интегрированным tomcat или jetty сервером, редко используются war-пакеты для развертывания в внешних контейнерах служб, даже если их放到 linux, то обычно это запуск класса Application напрямую, но иногда нам нужно развернуть их на внешних серверах, что для Spring Boot может быть несколько проблематично

Не будем тратить время на пустые слова, давайте вместе посмотрим на подробное описание.

Декларация окружающей среды:

jdk: 1.8

Сервер: AliCloud, 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

将maven插件修改为

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

需要注意的是,因为我没有web.xml。所以多加了

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

2.

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

finalName должен соответствовать context-path в application.yml.

3. Необходимо изменить зависимость tomcat на компиляцию

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

4. Входной класс springBoot, наследующий SpringBootServletInitializer и переопределяющий

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

MainApplication.class является входным классом springBoot.

Пакетирование

Перейдите в корневую директорию проекта. Если вы используете IDEA, просто введите сюда:

mvn clean package -DskipTests

После завершения打包, в папке target проекта будет создан соответствующий war-файл

Загрузка

Достаточно просто положить war-файл в директорию webapps tomcat.

Проблемы, которые пока не решены:

Изначально планировалось напрямую打包 в jar-архив. Затем直接 запустить springBoot. Но, к сожалению,打包 в jar-архив, постоянно中出现maven плагин ошибка. Поэтому можно только打包 в war-архив и загрузить на tomcat.

Если кто-то решил эту проблему, дайте знать.

В этой статье говорится, что это баг....

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

Обновление。。。。

Проблема решена. Теперь можно напрямую打包 springBoot в Jar и запустить.

Причина:

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

Официальные примеры, предоставленные springBoot, используют этот плагин.

Maven автоматически загрузит version 2.4 и version 2.6 maven-jar-plugin.

Maven по умолчанию будет зависеть от версии 2.6. Вначале не обратил внимания на ошибку, которую сообщил проект, jar 2.6 maven-jar-plugin несовместим. В результате не мог найти ошибку...

Таким образом, версия 2.6 несовместима. Достаточно вручную изменить его на версию 2.4. Вот как это выглядит:

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

Резюме

Вот и все, что есть в этой статье, надеюсь, что контент статьи будет полезен для вашего обучения или работы. Если у вас есть вопросы, пожалуйста, оставляйте комментарии для обмена, спасибо за поддержку呐喊 руководства.

Заявление: контент этой статьи взят из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, загружен пользователями самостоятельно, сайт не имеет права собственности, не прошел редактирование и не несет ответственности за связанные с этим юридические последствия. Если вы обнаружите подозрительный контент, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @), чтобы сообщить о нарушении авторских прав,并提供 соответствующие доказательства. Если факт будет подтвержден, сайт немедленно удалил涉嫌侵权的内容。

Основной учебник
Рекомендуем к просмотру