web-dev-qa-db-ja.com

Webサーバーを開始できませんでした。ポート8080はすでに使用されています。春のブーツ

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アプリケーションに変換せずに使用する方法.

2

組み込みサーバーを起動したくない場合は、次のプロパティを設定するだけです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

4
Gustavo Passini

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

その後、少し待つか、別のポートを使用するように再構成できます。

アプリケーションの実行時にランダムに生成してポートが解放されているかどうかを確認するコードを作成できると思います。彼らが使い始めると、これは減少するリターンを持っていますが。一方、アプリケーションが停止すると、上記の処理を実行するリソースクリーンアップコードを追加できます。

1
entiy0

すでに使用されているポートを使用しようとしています。

ポートはトランスポート層で使用されます-tcphttpはアプリケーション層であり、トランスポート層を使用して要求を送受信します。

Spring Bootアプリによって公開されるデフォルトのポートは8080。あなたの場合には2つの解決策があります:

  • アプリケーションのポートを変更する
  • 使用したいポートを使用しているサービスを停止する
1
Dominik

Springbootアプリをカスタマイズして任意のポートで起動するだけです: https://www.javadevjournal.com/spring-boot/change-the-default-port-in-spring-boot/

0
Mitzy Valencia

クライアントアプリケーションもスプリングブートアプリケーションです。これは、8080ポートで2つのスプリングブートアプリケーションを実行する理由です。それらの1つを変更するか、スタンドアロンのJavaアプリケーションをメインクラスで作成し、そこにWebクライアントを配置して実行します。httpクライアントとしてApache Httpクライアントを使用できます。

0

次の行を追加すると、application.propertiesでアプリケーションのデフォルトポートを変更できます。

server.port = 8090

0
jayesh