繁体   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