2016-09-16 48 views
3

我的應用程序部署在http://123.87.65.23:8080。上下文路徑爲/myapp,配置爲application.properties。所以如果我訪問http://123.87.65.23:8080,我得到404。但如果我訪問http://123.87.65.23:8080/myapp/health,我得到200如預期。如何使spring boot embedded tomcat爲基本url返回200 OK?

我們的操作團隊監控200個OK的基址(http://123.87.65.23:8080)。 我有兩個選擇:

  1. 返回200 OK時,我打http://123.87.65.23:8080。沒有迴應是必需的。

  2. 或者以某種方式代理我的Spring Boot應用程序中的請求http://123.87.65.23:8080http://123.87.65.23:8080/myapp/health

注意:我正在使用嵌入式tomcat。所以更改server.xml的選項是不適用的

我不知道如何做任何選擇。

回答

1

在你的tomcat容器中,如果你想使用root url,你的應用應該被部署到一個名爲「ROOT」的目錄中,而不是「myapp」。我想你的Dispatcherservlet可能被配置爲處理對/ health的請求,而你只需要處理/ 或者你可能已經有了一個映射到/ health的控制器。 不能告訴別的不代碼

2

如果您在.properties文件中設置的contextPath屬性,那麼春天做什麼它應該做的,一切被搬到那裏。

如果您將應用打包爲.war並在外部服務器上運行該應用,則可以將該服務器設置爲將根請求重定向到Spring Boot應用內的任何URL。

如果你在打包應用程序作爲一個可運行的.jar與嵌入式服務器,你想保持在.properties -levelcontextPath然後

一),你仍然需要某種形式的外部服務器的可捕捉請求根和重定向到您的春季啓動應用程序

b)您需要設置兩個不同的DispatcherServlets其中一個的contextPath/myapp和對方的是/將重定向到你的Spring引導應用程序

然而,最簡單的的解決辦法是刪除contextPath,只是在前面加上每個控制器的@RequestMapping/myapp,將所有management端點/myappmanagement.context-path和寫一個@Controller方法映射到/重定向到健康的端點。

2

如果您想在http://123.87.65.23:8080請求中獲得200,您需要在webapps文件夾中命名爲ROOT.war的應用程序。

所以http://123.87.65.23:8080http://123.87.65.23:8080/myapp是兩種不同的應用。

我建議你兩個選擇:

  1. 將應用程序部署爲http://123.87.65.23:8080(ROOT.war)
  2. 使用一些代理服務器像nginx的或Apache。您可以配置代理服務器的所有ROOT請求重定向到您的應用程序

下面是一些例子爲nginx的

location/{ 
    proxy_pass http://123.87.65.23:8080/myapp/; 
} 

或只返回200:

location/{ 
    return 200; 
} 
+0

豎起大拇指ROOT.war。對我來說也是一種新的學習。 –

+0

我正在使用嵌入式tomcat。所以使用root.war不適合我 –