gatewayとspring-boot-starter-webの衝突問題の解決


gatewayとspring-boot-starter-webの衝突
環境:
SprigCloudバージョン----Finchley.SR 2
Spring Bootバージョン----2.0.6.RELEASE
問題の説明:
zulゲートウェイをgatewayにアップグレードする時、gateway依存スタートネット関連子プロジェクトを導入してエラーを報告します。
導入の依存度:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
起動ゲートウェイエラー
Error starting Apple Contect.To display the conditions report re-run your appication with'debug'enabled.
2019-12-31:26:35.211 ERROR 1324-[main]o.s.b.d.ロギングFailure Analysis Report:
******************************************
APPLICATION FAILE D TO START
******************************************
Description:
Parameeter 0 of method modifyRequest Body GatewayFilterFactory in org.springframe ork.clody.gateway.com nfig.Gateway Autonfigration required a bean of type'org.sprigframe ork.sprigframe.phtfider.Covertder.Cont。
アクション:
Consder defining a bean of type'org.spring frame ework.http.com dec.ServerCodecCofigrer'in your configration.
Process finished with exit code 1
問題の分析:
コンソールの印刷ログを表示:

web依存のtomcat容器の起動に失敗し、nio異常を印刷したものと見られます。
zulとgatewayの違いを振り返ってみます。
Zuul:Servlet 2.5に構築され、3.xに対応しています。閉塞式のAPIを使用しています。長い接続はサポートされていません。例えば、websockets。
GatewayはSpring 5+に構築され、Spring Boot 2.x応答式の非閉塞式APIに基づいている。同時に、それはwebsocketsを支持して、Springフレームと緊密に集積します。
エラーの原因:起動時にはspring-book-starter-webの内蔵容器をデフォルトで使用していますが、ブロック以外はサポートされていません。
問題解決:
二つの解決方法があります。
1、web内蔵容器を除く

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- Maven             ,         war          spring-boot  -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
2、spring-webfluxモジュールを使用する
webfluxには全く新しい非つまり関数式Reactive Webフレームがあり、非同期的、非塞栓的、イベント駆動的なサービスを構築するために使用できます。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
プロジェクトの起動に成功しました

ゲートウェイバージョンの衝突問題
1、spring-cloudバージョン

<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
2、sprring-bootバージョン

<version>2.0.3.RELEASE</version>
3、エラーの説明
Error starting Apple Contect.To display the conditions report re-run your appication with'debug'enabled.
2019-05-21 16:53:50.138 ERROR 15338-[main]o.s.b.d.ロギングFailure Analysis Report:
******************************************
APPLICATION FAILE D TO START
******************************************
Description:
Parameeter 0 of method modifyRequest Body GatewayFilterFactory in org.springframe ork.clody.gateway.com nfig.Gateway Autonfigration required a bean of type'org.sprigframe ork.sprigframe.phtfider.Covertder.Cont。
アクション:
Consder defining a bean of type'org.spring frame ework.http.com dec.ServerCodecCofigrer'in your configration.
4、原因

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
を選択します

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-gateway</artifactId>
 </dependency>
バージョン競合
5、解決
削除できます

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
以上は個人の経験ですので、参考にしていただければと思います。