[英]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.