結論:外部優先級大于內部
在 application.yml
中配置了:
server:port: 8080servlet:context-path: /demo
這表示你的 Spring Boot 應用的上下文路徑(context-path)是 /demo
,即訪問你的服務時,URL 必須以 /demo
開頭,比如:
http://localhost:8080/demo/xxx
部署時 "path": "/DemoApplication"
- 在部署(比如 Tomcat、容器、云平臺等)時,指定了
"path": "/DemoApplication"
,這是外部容器的 context-path 配置。 - 例如,在 Tomcat 的
server.xml
或者云平臺的部署配置中,可能會有<Context path="/DemoApplication" .../>
或類似的參數。
誰生效?
- 外部容器優先級更高:如果你用外部容器(如 Tomcat、WebSphere)部署 Spring Boot 的 war 包,外部容器的 context-path(如
/DemoApplication
)會覆蓋 Spring Boot 內部的application.yml
配置。 - 內嵌容器生效:如果你用 Spring Boot 的 jar 包(內嵌 Tomcat),則只會用
application.yml
里的context-path
配置(如/demo
)。
訪問路徑舉例
- 內嵌 Tomcat(jar 方式)
訪問路徑為:http://localhost:8080/demo/xxx
- 外部 Tomcat(war 方式,配置了 path=/DemoApplication)
訪問路徑為:http://localhost:8080/DemoApplication/xxx
總結
- 誰生效?
- 用 jar 包啟動,
application.yml
的context-path
生效。 - 用 war 包部署到外部容器,容器的 context-path 配置生效,
application.yml
的context-path
可能會被覆蓋。
- 用 jar 包啟動,
- 建議
- 不要同時在外部容器和
application.yml
配置 context-path,容易混淆。 - 推薦統一在一個地方配置,優先用外部容器的 context-path。
- 不要同時在外部容器和
如需進一步區分或排查實際生效路徑,可以訪問 /
看實際跳轉到哪個路徑,或查看啟動日志中的 context-path 信息。