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

Spring Boot Deployment zur Remote-Server-Tomcat

Einleitung

Spring Boot-Projekte laufen in der Regel auf einem eingebetteten Tomcat- oder Jetty-Server, sie werden selten als War-Paket in einem externen Service-Container bereitgestellt. Selbst wenn sie auf Linux stehen, wird in der Regel die Application-Klasse direkt gestartet, aber manchmal müssen wir sie auf einem externen Server bereitstellen, was für Spring Boot etwas umständlich ist.

Ich werde nicht lange um den heißen Brei herumreden, lassen Sie uns gemeinsam den detaillierten Überblick betrachten.

Umgebungserklärung:

jdk:1.8

Server: Alibaba Cloud, Ubuntu 16.04

springBoot:1.5.9.RELEASE

Ziel

Das SpringBoot-Paket wird in den Tomcat auf dem Remote-Server gepackt.

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

Ändern Sie den Maven-Plugin in

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

Zu beachten ist, dass ich, da ich keine web.xml habe, extra hinzugefügt habe

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

2、

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

finalName muss mit context in application.yml übereinstimmen-Pfad identisch.

3、Tomcats Abhängigkeit muss auf die Compiler-Zeit geändert werden

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

4、SpringBoot-Eingangsklasse, die SpringBootServletInitializer erbt und überschreibt

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

Darin ist MainApplication.class die Eingangsklasse von SpringBoot.

Packen

Gehe zum Wurzelverzeichnis des Projekts. Wenn du IDEA verwendest, gib hier einfach ein:

mvn clean package -DskipTests

Nach Abschluss des Packens wird die entsprechende .war-Datei im Verzeichnis target des Projekts erstellt

Hochladen

Legen Sie einfach die War-Datei in den Ordner webapps von Tomcat.

Noch nicht gelöste Probleme:

Zunächst wollte ich direkt ein Jar-Paket erstellen. Dann direkt SpringBoot starten. Leider habe ich es als Jar-Paket erstellt und es immer im Teil der Maven-Plugins gemeldet. Ich konnte nur als War-Paket erstellt und auf den Tomcat hochgeladen werden.

Wenn jemand dieses Problem gelöst hat, bitte mich benachrichtigen.

In diesem Artikel wird gesagt, dass dies ein Bug ist...

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

Aktualisierung。。。。

Das Problem wurde gelöst. Man kann SpringBoot direkt in ein Jar-Paket verpacken und ausführen.

Ursache:

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

von SpringBoot bereitgestellte offizielle Beispiele, die auf dieses Plugin zurückgreifen.

Maven lädt automatisch 2.4 Version und 2.6Version des maven-jar-plugin.

und Maven standardmäßig abhängt 2.6Version... Am Anfang habe ich den Fehler nicht bemerkt, der im Projekt gemeldet wurde, er war maven-jar-plugin 2.6jar Inkompatibilität. Dies führt dazu, dass der Fehler immer nicht gefunden wird...

das ist auch 2.6Version Inkompatibilität. Man muss sie nur manuell ändern 2.4Version wie folgt:

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

Zusammenfassung

Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass der Inhalt dieses Artikels für Ihre Lern- oder Arbeitsaktivitäten einen gewissen Referenzwert hat. Wenn Sie Fragen haben, können Sie gerne Kommentare hinterlassen. Vielen Dank für Ihre Unterstützung der Anleitung.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie urheberrechtlich relevante Inhalte entdecken, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @ beim Senden von E-Mails zur Meldung von Verstößen und stellen Sie relevante Beweise zur Verfügung. Sobald nachgewiesen wird, dass der Vorfall zutrifft, wird diese Website die beanstandeten urheberrechtlichen Inhalte sofort löschen.)

Vermutlich gefällt Ihnen