3
默認情況下,Togglz管理控制檯在應用程序端口上運行(由server.port
屬性配置)。我想在management.port
上公開它。我的問題:這可能嗎?在管理端口上公開Togglz管理控制檯啓動管理端口
默認情況下,Togglz管理控制檯在應用程序端口上運行(由server.port
屬性配置)。我想在management.port
上公開它。我的問題:這可能嗎?在管理端口上公開Togglz管理控制檯啓動管理端口
如果您使用Togglz> = 2.4.0,則此功能開箱即可使用。
對於老版本的解決方案是如下:
我設法與MvcEndpoint
包裹它暴露在management.port
原始的servlet。 最簡單的辦法做到這一點使用Spring雲模塊,做所有的工作適合你(例如在HystrixStreamEndpoint):
public class HystrixStreamEndpoint extends ServletWrappingEndpoint {
public HystrixStreamEndpoint() {
super(HystrixMetricsStreamServlet.class, "hystrixStream", "/hystrix.stream",
true, true);
}
}
在TogglzConsoleServlet
的情況下很不幸多了一個黑客做與路徑的原因的方式它提取前綴從請求的URI,所以整個的解決方案看起來有點醜:
@Component
class TogglzConsoleEndpoint implements MvcEndpoint {
private static final String ADMIN_CONSOLE_URL = "/togglz-console";
private final TogglzConsoleServlet togglzConsoleServlet;
@Autowired
TogglzConsoleEndpoint(final ServletContext servletContext) throws ServletException {
this.togglzConsoleServlet = new TogglzConsoleServlet();
togglzConsoleServlet.init(new DelegatingServletConfig(servletContext));
}
@Override
public String getPath() {
return ADMIN_CONSOLE_URL;
}
@Override
public boolean isSensitive() {
return true;
}
@Override
public Class<? extends Endpoint> getEndpointType() {
return null;
}
@RequestMapping("**")
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request) {
@Override
public String getServletPath() {
return ADMIN_CONSOLE_URL;
}
};
togglzConsoleServlet.service(requestWrapper, response);
return null;
}
private class DelegatingServletConfig implements ServletConfig {
private final ServletContext servletContext;
DelegatingServletConfig(final ServletContext servletContext) {
this.servletContext = servletContext;
}
@Override
public String getServletName() {
return TogglzConsoleEndpoint.this.togglzConsoleServlet.getServletName();
}
@Override
public ServletContext getServletContext() {
return servletContext;
}
@Override
public String getInitParameter(final String name) {
return servletContext.getInitParameter(name);
}
@Override
public Enumeration<String> getInitParameterNames() {
return servletContext.getInitParameterNames();
}
}
}
對於未來的用戶:這已經實現:https://github.com/togglz/togglz/issues/190並將在'2.4.0' RC中提供 – justderb