2016-11-28 12 views
3

デフォルトでは、Toggle管理コンソールはアプリケーションポート(server.portプロパティで設定)で動作します。 management.portに公開したいと思います。私の質問:それは可能ですか?Toggle管理コンソールをSpringで起動管理ポート

+0

:やり方には、ソリューション全体が少し醜い少し見えますので、リクエストURIからプレフィックスを抽出し、これが実装されました:https://github.com/togglz/togglz/issues/190 '2.4.0' RCで利用可能になります – justderb

答えて

3

Togglz> = 2.4.0を使用すると、この機能はそのまま使用できます。古いリリースソリューションの

は以下の通りです:私はMvcEndpointとそれを包むことにより、management.portに生のサーブレットを公開するために管理

。 (HystrixStreamEndpointで例えば)あなたのためのすべての仕事をして春クラウドモジュールを使用するためにそれを行うには 最も簡単な方法:

public class HystrixStreamEndpoint extends ServletWrappingEndpoint { 

    public HystrixStreamEndpoint() { 
     super(HystrixMetricsStreamServlet.class, "hystrixStream", "/hystrix.stream", 
       true, true); 
    } 

} 

パスの原因に関係するもう一つのハックは残念ながらありTogglzConsoleServletの場合将来の訪問者のための

@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(); 
     } 
    } 
} 
関連する問題