簡體   English   中英

無法在 Tomcat 上執行 SpringBoot 端點

[英]Cannot execute SpringBoot endpoint on Tomcat

我使用 SpringBoot 開發了以下端點:

@RestController
@RequestMapping("api/v1")
public class UserResource {

    @GetMapping("users")
    public ResponseEntity<List<User>> getUsers() {
        return ResponseEntity.ok().body(List.of(new User("George", "Walker")));
    }

}

當我使用bootRun Gradle 任務啟動它時,端點工作。

可以使用以下方式訪問端點: http://localhost:8080/api/v1/users

在此處輸入圖像描述

然后我使用war Gradle Task 構建一個 war 文件,並使用 Tomcat 部署它。

在此處輸入圖像描述

我嘗試使用 URL 到達相同的端點: http://localhost:8080/user-service-api-0.0.1-SNAPSHOT-plain/api/v1/users ,但它失敗了。 Tomcat 已啟動,應用程序已部署,但端點不可訪問。

除此之外,我在build.gradle條目中有: org.springframework.boot:spring-boot-starter-tomcat和一個類:

package net.bean.userserviceapi;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(UserServiceApiApplication.class);
    }

}

我究竟做錯了什么?

謝謝你。

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.traditional-deployment

生成可部署 war 文件的第一步是提供一個 SpringBootServletInitializer 子類並覆蓋其配置方法。 這樣做會利用 Spring Framework 的 servlet 3.0 支持,並允許您在 servlet 容器啟動應用程序時對其進行配置。

第一步:配置你的maven文件來生成一個war包。

<packaging>war</packaging>

第二步:是讓你的主類擴展SpringBootServletInitializer

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

檢查此鏈接以獲取更多詳細信息。

原因是我試過在Apache Tomcat 10上運行,在Tomcat 9上運行很流暢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM