2016-11-28 6 views
3

기본적으로 Togglz 관리 콘솔은 응용 프로그램 포트 (server.port 속성으로 구성)에서 실행됩니다. management.port에 공개하고 싶습니다. 내 질문 : 가능합니까?Spring에서 Toggle 관리 콘솔 공개 관리 포트에서 부팅

+0

: 방법으로는 전체 솔루션 조금 못생긴 비트 보이는, 그래서 요청 URI에서 접두사를 추출이 구현되었습니다 : https://github.com/togglz/togglz/issues/190 '2.4.0' RC에서 사용할 수 있습니다. – justderb

답변

3

Togglz> = 2.4.0을 사용하면이 기능을 사용할 수 있습니다. 이전 릴리스 솔루션에 대한

은 다음과 같습니다 : 나는 MvcEndpoint로 포장하여 management.port에 원시 서블릿을 노출 관리

. 경로의 때문에 함께 할 수있는 또 하나의 해킹 불행하게도이 TogglzConsoleServlet의 경우

public class HystrixStreamEndpoint extends ServletWrappingEndpoint { 

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

} 

: 가장 쉬운 방법은합니다 (HystrixStreamEndpoint 예를 들면) 당신을 위해 모든 일을 봄 클라우드 모듈을 사용하도록 할 수 있습니다 미래의 방문자를위한

@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(); 
     } 
    } 
}