[JAVA] Veuillez noter que Spring Boot + Tomcat 8.5.8 ne peut pas être utilisé!

La dernière version actuellement publiée (au 13/12/2016) est Spring Boot 1.4.2.RELEASE, et la valeur par défaut est 8.5.6 pour Tomcat. Vous pouvez facilement changer la version de Tomcat en créant un projet via SPRING INITIALIZR.

Si vous utilisez Maven comme outil de construction, spécifiez simplement la version dans les propriétés comme indiqué ci-dessous.

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

Que se passe-t-il si vous utilisez 8.5.8?

Pour le moment ... Tomcat ne commencera pas à utiliser le numéro de port par défaut (8080): scream:

Le contenu de l'erreur est "Adresse déjà utilisée". Dans un sens, c'est une erreur courante que vous pouvez rencontrer lorsque vous touchez plusieurs applications Spring Boot en même temps et qu'elles sont toujours en cours d'exécution.

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

Mais cette fois, une autre application ne fonctionne pas, et il n'y a pas de processus zombie ...

Alors pourquoi Address est-il déjà utilisé?

Je n'entrerai pas dans les détails, mais lorsque j'utilise le Tomcat 8.5.8 intégré sur Spring Boot, c'est parce que j'ai involontairement créé deux Connectors pour Tomcat. Par défaut, les deux utilisent le port 8080, donc "Adresse déjà utilisée" apparaît ...

Essayez de changer le numéro de port du serveur en 18080 à l'aide des propriétés Spring Boot ...

server.port=18080

Le journal suivant sera généré et le serveur démarrera.

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

Cela démarre, mais ... 8080 (Connecteur fabriqué par Tomcat) et 18080 (Connecteur fabriqué par Spring Boot) ont démarré Tomcat en attente d'une requête: fatigue_face:

Si vous voulez connaître la cause détaillée ...

Andy Wilkinson du Core Committer de Spring Boot, un membre du projet Spring Project, a signalé un bug! !!

Le contenu est le même que celui présenté ici, mais comme le problème est posé du côté de Spring Boot, je publierai un lien.

Que devrais-je faire?

Eh bien, je pense qu'il est préférable d'utiliser Tomcat 8.5.6 docilement. Si, pour une raison quelconque, vous devez utiliser une version supérieure au lieu de 8.5.6 ... essayez 8.5.9. Pour le moment, ça a commencé: sweat_smile: Je n'ai pas vu la cause, mais quand je l'ai élevé à 8.5.9 et que je l'ai rendu public, une erreur s'est produite dans le test Spring Boot, donc même avec 8.5.9, il se peut que certaines choses ne se passent pas bien lorsqu'elles sont combinées avec Spring Boot. Hmm.

Résumé

Sauf si vous avez une raison spécifique, utilisez simplement Tomcat, dont dépend votre Spring Boot. À tout le moins, il doit s'agir d'une version éprouvée qui a été utilisée dans les versions précédentes de Spring Boot ... Vous devez être conscient que vous courez un risque accru de dysfonctionnements fatals.

Site de référence

Recommended Posts

Veuillez noter que Spring Boot + Tomcat 8.5.8 ne peut pas être utilisé!
Notez que les propriétés système, y compris JAXBContext, ne peuvent pas être utilisées dans Java11
L'histoire du port devenant inutilisable dans l'exemple de programme Spring Boot
Parce que getSupportLoaderManager ne peut pas être utilisé
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
CentOS7 VirtualBOX yum ne peut pas être utilisé
Sachez que la valeur par défaut de la redirection Spring Boot est http
Notez que Spring Data JDBC n'a pas pu insérer
Un mémo qui a touché Spring Boot
[Spring Boot] Liste des règles de validation qui peuvent être utilisées dans le fichier de propriétés pour les messages d'erreur
Code Java qui ne peut pas être utilisé depuis Kotlin (pour les sessions d'étude en interne)
J'ai utilisé Docker pour solidifier le modèle à développer avec Spring Boot.
Spring Boot 2.0.0 ne démarre pas le Tomcat intégré
Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)
Cookie SameSite dans Spring Boot (Spring Web MVC + Tomcat)
[Java] Scènes qui ne peuvent pas être réaffectées (essentiellement définitives)
Organiser les méthodes qui peuvent être utilisées avec StringUtils
Annotations utilisées dans les outils de gestion des tâches Spring Boot
Pourquoi la comparaison de classe de type chaîne Java (==) ne peut pas être utilisée