[JAVA] Bitte beachten Sie, dass Spring Boot + Tomcat 8.5.8 nicht verwendet werden kann!

Die aktuellste Version (Stand: 13. Dezember 2016) ist Spring Boot 1.4.2.RELEASE und die Standardeinstellung ist 8.5.6 für Tomcat. Sie können die Version von Tomcat einfach ändern, indem Sie ein Projekt über SPRING INITIALIZR erstellen.

Wenn Sie Maven als Build-Tool verwenden, geben Sie einfach die Version in den Eigenschaften an, wie unten gezeigt.

<properties>
    <!-- ... -->
    <tomcat.version>8.5.8</tomcat.version>
</properties>

Was passiert, wenn Sie 8.5.8 verwenden?

Vorerst ... Tomcat verwendet die Standardportnummer (8080) nicht mehr: schreien:

Der Inhalt des Fehlers lautet "Adresse wird bereits verwendet". In gewissem Sinne ist dies ein häufiger Fehler, der auftreten kann, wenn Sie mehrere Spring Boot-Anwendungen gleichzeitig berühren und diese noch ausgeführt werden.

...
2016-12-11 03:12:06.364 ERROR 20786 --- [           main] o.a.coyote.http11.Http11NioProtocol      : Failed to start end point associated with ProtocolHandler [http-nio-8080]

java.net.BindException: Address already in use
	at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_102]
	at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_102]
...

Aber dieses Mal läuft keine andere App und es gibt keinen Zombie-Prozess ...

Warum wird Address bereits verwendet?

Ich werde nicht auf die Details eingehen, aber wenn ich den integrierten Tomcat 8.5.8 in Spring Boot verwende, erstelle ich versehentlich zwei "Connector" für Tomcat. Standardmäßig verwenden beide den 8080-Port, sodass "Adresse wird bereits verwendet" angezeigt wird ...

Versuchen Sie, die Server-Portnummer mithilfe der Spring Boot-Eigenschaften auf 18080 zu ändern ...

server.port=18080

Das folgende Protokoll wird ausgegeben und der Server wird gestartet.

...
2016-12-11 03:15:39.717  INFO 20842 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 18080 (http)
2016-12-11 03:15:39.721  INFO 20842 --- [           main] com.example.Tomcat858DemoApplication     : Started Tomcat858DemoApplication in 2.639 seconds (JVM running for 3.076)

Es startet, aber ... 8080 (Connector von Tomcat) und 18080 (Connector von Spring Boot) haben Tomcat gestartet und auf eine Anfrage gewartet: müde_gesicht:

Wenn Sie die detaillierte Ursache wissen wollen ...

Andy Wilkinson von Spring Boot's Core Committer, einem Projektmitglied des Spring Project, hat einen Fehler gemeldet! !!

Der Inhalt ist der gleiche wie der hier vorgestellte, aber da das Problem auf der Spring Boot-Seite auftritt, werde ich einen Link veröffentlichen.

Was soll ich machen?

Nun, ich denke, es ist am besten, Tomcat 8.5.6 gehorsam zu verwenden. Wenn Sie aus irgendeinem Grund eine höhere Version anstelle von 8.5.6 verwenden müssen, versuchen Sie es mit 8.5.9. Vorerst ging es los: Sweat_smile: Ich habe die Ursache nicht gesehen, aber als ich sie auf 8.5.9 erhöhte und veröffentlichte, trat im Spring Boot-Test ein Fehler auf. Selbst mit 8.5.9 kann es einige Dinge geben, die in Kombination mit Spring Boot nicht gut funktionieren. Hmm.

Zusammenfassung

Verwenden Sie Tomcat, das von Ihrem Spring Boot abhängt, es sei denn, Sie haben einen bestimmten Grund. Zumindest muss es sich um eine bewährte Version handeln, die in früheren Versionen von Spring Boot verwendet wurde ... Sie sollten sich bewusst sein, dass Sie einem erhöhten Risiko für schwerwiegende Fehlfunktionen ausgesetzt sind.

Referenzseite

Recommended Posts

Bitte beachten Sie, dass Spring Boot + Tomcat 8.5.8 nicht verwendet werden kann!
Beachten Sie, dass Systemeigenschaften einschließlich JAXBContext in Java11 nicht verwendet werden können
Die Geschichte, dass der Port im Spring-Boot-Beispielprogramm unbrauchbar wird
Weil getSupportLoaderManager nicht verwendet werden kann
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
CentOS7 VirtualBOX yum kann nicht verwendet werden
Beachten Sie, dass die Standardeinstellung für die Spring-Boot-Umleitung http ist
Ein Memo über den Fall, dass das Einfügen mit Spring Data JDBC nicht durchgeführt werden konnte
Ein Memo, das Spring Boot berührte
[Spring Boot] Liste der Validierungsregeln, die in der Eigenschaftendatei für Fehlermeldungen verwendet werden können
Java-Code, der nicht von Kotlin verwendet werden kann (für interne Lernsitzungen)
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
Spring Boot 2.0.0 startet den integrierten Tomcat nicht
Versuchen Sie Spring Boot 1 (Umgebungskonstruktion ~ Tomcat-Start)
SameSite-Cookie im Spring Boot (Spring Web MVC + Tomcat)
[Java] Szenen, die nicht neu zugewiesen werden können (im Wesentlichen endgültig)
Organisieren Sie Methoden, die mit StringUtils verwendet werden können
Anmerkungen, die in Spring Boot-Aufgabenverwaltungstools verwendet werden
Warum der Klassenvergleich vom Typ Java String (==) nicht verwendet werden kann