[英]Springboot endpoint fails when the war is deploy in an external Tomcat
[英]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);
}
}
我究竟做错了什么?
谢谢你。
生成可部署 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.