Heim  >  Artikel  >  Java  >  So lösen Sie die Probleme, die beim Packen und Freigeben des SpringBoot-Projekts für externes Tomcat auftreten

So lösen Sie die Probleme, die beim Packen und Freigeben des SpringBoot-Projekts für externes Tomcat auftreten

WBOY
WBOYnach vorne
2023-05-10 17:49:141013Durchsuche

Lassen Sie uns zunächst über die Situation sprechen, in der wir auf Probleme gestoßen sind:

Ich habe zum ersten Mal versucht, mit dem Spring-Boot-Framework ein kleines Webprojekt zu schreiben, und es konnte gestartet und normal ausgeführt werden Intellij-IDEE. Verwenden Sie maven, um install auszuführen, das Kriegspaket zu generieren und es im lokalen Tomcat zu veröffentlichen. Die Hauptausnahmeinformation ist .....LifeCycleException. Nach mehreren Suchen habe ich die Antwort gefunden.

Da Spring Boot über einen eingebetteten Tomcat-Container verfügt, kann das Projekt durch Verpacken als JAR-Paket veröffentlicht werden. Aber wie verpackt man das Spring Boot-Projekt in ein Kriegspaketprojekt, das auf Tomcat veröffentlicht werden kann?

1. Da Sie es in ein Kriegspaketprojekt packen müssen, müssen Sie zuerst den Verpackungstyp in der Datei pom.xml ändern und den Spring Boot-Standardwert jar ändern. Verpackung> zu

2 Im Projekt müssen wir über den in Spring Boot eingebetteten Tomcat sprechen. Schließen Sie Paketabhängigkeiten aus, da sonst Konflikte auftreten. Öffnen Sie einfach die Kommentare im folgenden Code.

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
  <!--
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
  -->
</dependency>

Eine Sache, die ich sagen möchte, ist, dass Sie einfach die folgenden Abhängigkeiten hinzufügen möchten, wenn Sie bei der lokalen Entwicklung weiterhin Spring Boot Embedded Tomcat zum Debuggen verwenden möchten. Der Einstiegspunkt für Spring Boot zum Freigeben des JAR-Paket-Webprogramms ist die Klasse, in der sich die Hauptfunktion befindet, die mit @SpringBootApplication annotiert ist. Wenn das Kriegspaket jedoch auf Tomcat veröffentlicht wird, müssen Sie eine SpringBootServletInitializer-Unterklasse hinzufügen und deren Konfigurationsmethode überschreiben oder die Klasse, in der sich die Hauptfunktion befindet, direkt von der SpringBootServletInitializer-Unterklasse erben und deren Konfigurationsmethode überschreiben. Das Codebeispiel lautet wie folgt:

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-tomcat</artifactid>
  <scope>provided</scope>
</dependency>

Das Obige schließt alle Schritte zum Packen des Kriegspakets des Spring Boot-Projekts ab, das auf Tomcat7 und höher veröffentlicht werden kann.

Der letzte und wichtigste Punkt ist, dass, wenn Ihre lokale Tomcat-Version nicht mit der 8.0-Version übereinstimmt, die von Springboot automatisch integriert wird. Es wird auch Probleme geben, die Lösung lautet:

Meine lokale Tomcat-Version ist 8.0.28 und der Tomcat auf dem Server ist 7.0.69. Ich habe Tomcat 7.0.70 lokal bereitgestellt und den gleichen Fehler gemeldet. Ich bin mir eher sicher, dass das Problem mit der Tomcat-Version zusammenhängt. Nachdem ich auf vielfältige Weise nach Informationen gesucht hatte, stieß ich schließlich auf einen Ausländer, der sagte, dass der Standard-Servlet-Container von SpringBoot auf Tomcat8 basiert. Wenn Sie das Einbettungspaket von Tomcat8 unter Tomcat7 verwenden, wird es definitiv nicht funktionieren.

Um niedrigere Versionen von Tomcat zu unterstützen, müssen Sie die Tomat-Version in Maven angeben. Die Konfiguration ist wie folgt:

@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);
  }
}

Dann hinzufügen es in die Abhängigkeit einfügen (dies ist eigentlich nicht notwendig, das offizielle Dokument wird hinzugefügt) So lösen Sie die Probleme, die beim Packen und Freigeben des SpringBoot-Projekts für externes Tomcat auftreten

<properties>
  <tomcat.version>7.0.69</tomcat.version>
</properties>
Nachdem ich es hinzugefügt hatte, habe ich es ausprobiert und es stellte sich heraus, dass es kein Problem war. Nachdem ich mir das lib-Verzeichnis im Kriegspaket angesehen habe, ist es tatsächlich ein Tomcat7-Paket geworden

Aber ich bin immer noch etwas verwirrt. Wie kann ich packen? Bedeutet das nicht, dass Sie die Tomcat-Version neu packen müssen, wenn Sie sie ändern? Da diese Einschränkung durch den Servlet-Container in SpringBoot verursacht wird, kann ich ihn nicht verwenden? Nachdem ich viele Informationen überprüft hatte, fand ich eine Lösung!

<dependency>
  <groupid>org.apache.tomcat</groupid>
  <artifactid>tomcat-juli</artifactid>
  <version>${tomcat.version}</version>
</dependency>

Das obige ist der detaillierte Inhalt vonSo lösen Sie die Probleme, die beim Packen und Freigeben des SpringBoot-Projekts für externes Tomcat auftreten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen