J'essaie d'appeler webAPI à partir du projet Gradle.
Mon build.gradle est le suivant.
plugins {
id 'org.springframework.boot' version '2.1.4.RELEASE'
id 'Java'
}
apply plugin: 'io.spring.dependency-management'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
runtimeOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compile 'org.springframework.boot:spring-boot-starter-webflux'
compile 'org.projectreactor:reactor-spring:1.0.1.RELEASE'
}
Si je supprime la dépendance suivante
compile 'org.springframework.boot:spring-boot-starter-webflux'
Cela fonctionne, mais si je l'ajoute en arrière. cela donne une erreur comme
Web server failed to start. Port 8080 was already in use.
Alors, comment puis-je résoudre ce problème, afin que je puisse utiliser le client Web? Parce que l'application n'est pas une application Web qui nécessite l'exécution du port. c'est une sorte de microservice.
Je veux juste utiliser WebClient de Spring Boot. Comment l'utiliser sans convertir mon application en application web.
Si vous ne voulez pas que le serveur intégré démarre, définissez simplement la propriété suivante en vous application.properties
(ou .yml
):
spring.main.web-application-type=none
Si votre chemin de classe contient les bits nécessaires pour démarrer un serveur Web, Spring Boot le démarrera automatiquement. Pour désactiver ce comportement, configurez WebApplicationType dans votre application.properties
Source: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html
Si sur Windows et que vous obtenez cela à chaque fois que vous exécutez l'application, vous devez continuer à le faire:
> netstat -ano | findstr *<port used>*
TCP 0.0.0.0:*<port used>* 0.0.0.0:0 LISTENING *<pid>*
TCP [::]:*<port used>* [::]:0 LISTENING *<pid>*
> taskkill /F /PID *<pid>*
SUCCESS: The process with PID *<pid>* has been terminated.
Si netstat ci-dessus inclut quelque chose comme ceci;
TCP [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:540yy [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:*<port used>* TIME_WAIT 0
Vous pouvez ensuite attendre un peu de temps ou reconfigurer pour utiliser un autre port.
Je suppose que nous pourrions écrire du code pour générer de manière aléatoire et vérifier si un port est libre lorsque l'application s'exécute. Bien que cela aura des rendements décroissants à mesure qu'ils commencent à s'épuiser. D'autre part, pourrait ajouter un code de nettoyage des ressources qui fait ce que nous avons ci-dessus une fois l'application arrêtée.
Vous essayez d'utiliser un port déjà utilisé.
Les ports sont utilisés sur la couche transport - tcp
, http
est la couche application et utilise une couche transport pour envoyer et recevoir des demandes.
Le port par défaut exposé par l'application Spring Boot est 8080
. Dans votre cas, vous avez deux solutions:
Personnalisez simplement votre application de démarrage de printemps pour démarrer dans n'importe quel port: https://www.javadevjournal.com/spring-boot/change-the-default-port-in-spring-boot/
Votre application cliente a également une application Spring Boot, c'est pourquoi vous avez deux applications Spring Boot exécutées dans le port 8080. Modifiez le port de l'un d'entre eux ou créez une application autonome Java avec la classe principale, placez-y votre client Web et exécutez-le. En tant que client http, vous pouvez utiliser Apache Http Client.
Vous pouvez modifier le port par défaut de votre application dans application.properties en ajoutant la ligne suivante:
server.port = 8090