我的应用已部署在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。
我们的运营团队监控基本网址(http://123.87.65.23:8080
)200 OK。
我有两个选择:
点击http://123.87.65.23:8080
时返回200 OK。无需回复。
或以某种方式将请求http://123.87.65.23:8080
代理到我的Spring Boot应用程序中的http://123.87.65.23:8080/myapp/health
。
注意:我使用的是嵌入式tomcat。所以更改server.xml的选项不适用
我不知道怎么做两种选择。
答案 0 :(得分:2)
如果您在contextPath
文件中设置了.properties
属性,则Spring会执行其应该执行的操作,所有内容都会移动到那里。
如果您将应用程序打包为.war
并在外部服务器中运行,则可以将该服务器设置为将根请求重定向到Spring Boot应用程序中的任何URL。
如果您将应用程序打包为具有嵌入式服务器的可运行.jar
,并且您希望将contextPath
保持在.properties
级别然后
a)您仍然需要某种外部服务器来捕获root请求并重定向到Spring Boot应用程序
b)您需要设置两个不同的DispatcherServlets
,其中contextPath
/myapp
为/
而另一个contextPath
为@RequestMapping
,这将会重定向你的Spring Boot应用程序
但是,最简单的解决方案是删除/myapp
,并将每个控制器的management
添加到/myapp
之前,移动所有management.context-path
1}}端点@Controller
与/
并写一个映射到read_only=True
的{{1}}方法重定向到健康端点。
答案 1 :(得分:2)
如果您希望获得200 ROOT.war
次请求,则需要在您的webapps文件夹中使用名为http://123.87.65.23:8080
的应用程序。
所以http://123.87.65.23:8080/myapp
和http://123.87.65.23:8080
是两个不同的应用程序。
我建议你两个选择:
location / {
proxy_pass http://123.87.65.23:8080/myapp/;
}
(ROOT.war)以下是 nginx 的一些示例:
location / {
return 200;
}
或者只返回200:
/**
* check_required_addons function.
*
* @access private
* @param mixed $product_id
* @return void
*/
private function check_required_addons( $product_id ) {
$addons = get_product_addons( $product_id, false, false, true ); // No parent addons, but yes to global
if ( is_array($addons)) {
return 1 < array_sum(array_column($addons,'required'));
}
return false;
}
答案 2 :(得分:1)
在您的tomcat容器中,如果您想使用根URL,您的应用程序应该部署到名为“ROOT”的目录中,而不是“myapp”。我猜你的Dispatcherservlet可能被配置为处理/ health的请求,你需要处理/ 或者你可能有一个控制器,映射到/ health。 没有代码就无法告诉别的什么