GradleプロジェクトからwebAPIを呼び出そうとしています。
私のbuild.gradleは次のとおりです。
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'
}
次の依存関係を削除すると
compile 'org.springframework.boot:spring-boot-starter-webflux'
動作しますが、再度追加すると、それはエラーを与える
Web server failed to start. Port 8080 was already in use.
それで、webclientを使用できるように、これをどのように修正しますか?アプリケーションは実行にポートを必要とするWebアプリケーションではないためです。それは一種のマイクロサービスです。
Spring BootのWebClientを使いたいだけです。スプリケーションをWebアプリケーションに変換せずに使用する方法.
組み込みサーバーを起動したくない場合は、次のプロパティを設定するだけですapplication.properties
(または.yml
):
spring.main.web-application-type=none
クラスパスにWebサーバーの起動に必要なビットが含まれている場合、Spring Bootが自動的に起動します。この動作を無効にするには、application.propertiesでWebApplicationTypeを構成します
ソース: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html
Windowsで、アプリケーションを実行するたびにこれを取得する場合は、続ける必要があります。
> 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.
上記のnetstatにこのようなものが含まれている場合;
TCP [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:540yy [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:*<port used>* TIME_WAIT 0
その後、少し待つか、別のポートを使用するように再構成できます。
アプリケーションの実行時にランダムに生成してポートが解放されているかどうかを確認するコードを作成できると思います。彼らが使い始めると、これは減少するリターンを持っていますが。一方、アプリケーションが停止すると、上記の処理を実行するリソースクリーンアップコードを追加できます。
すでに使用されているポートを使用しようとしています。
ポートはトランスポート層で使用されます-tcp
、http
はアプリケーション層であり、トランスポート層を使用して要求を送受信します。
Spring Bootアプリによって公開されるデフォルトのポートは8080
。あなたの場合には2つの解決策があります:
Springbootアプリをカスタマイズして任意のポートで起動するだけです: https://www.javadevjournal.com/spring-boot/change-the-default-port-in-spring-boot/
クライアントアプリケーションもスプリングブートアプリケーションです。これは、8080ポートで2つのスプリングブートアプリケーションを実行する理由です。それらの1つを変更するか、スタンドアロンのJavaアプリケーションをメインクラスで作成し、そこにWebクライアントを配置して実行します。httpクライアントとしてApache Httpクライアントを使用できます。
次の行を追加すると、application.propertiesでアプリケーションのデフォルトポートを変更できます。
server.port = 8090