2017-04-25 39 views
0

我正在尋找一種在運行時(例如,通過屬性文件或部署描述符)配置我的基於Jersey的應用程序中的服務可用的方法,即使服務可以由容器級別的管理員啓用或禁用。需要Jersey2技術在運行時啓用或禁用服務

我們的應用程序目前暴露15個不同的端點。它有1個應用程序用@ApplicationPath註解,3個類用@Path註解,在這3個類中有15個不同的方法用通常的@Path/@/@ Produces註釋。 我的應用程序有幾種不同的技術來讀取其運行時配置,例如設置連接到數據庫資源,觀察屬性文件的變化等。我想要做的是添加一些配置值,以便管理員可以啓用/禁用3個類或澤西平面上這些類中的任何單個端點。有人可以建議最好的方法來做到這一點? 進一步說明,我們希望在運行時控制此配置,因此如果配置發生更改,我們可以更新球衣配置以啓用/禁用已更改的服務,而無需重新啓動我們的容器(本例中爲Tomcat) 。 任何建議感激!謝謝!

回答

2

我不知道這是否可能與本身新澤西,但有一點我能想到的是隻使用一個新澤西預匹配過濾器,以確定端點被禁用。您可以使用也可充當偵聽器的服務並相應地更新禁用的端點。如果端點被禁用,那麼只需返回一個404.

@Provider 
@PreMatching 
public class DisabledEndpointsFilter implements ContainerRequestFilter { 

    @Inject 
    private ConfigurationService configuration; 


    @Override 
    public void filter(ContainerRequestContext request) throws IOException { 
     final List<String> disabledEndpoints = this.configuration.getDisabledEndpoints(); 
     final String path = stripLeadingSlash(request.getUriInfo().getPath()); 

     for (String endpoint: disabledEndpoints) { 
      endpoint = stripLeadingSlash(endpoint); 
      if (path.startsWith(endpoint)) { 
       request.abortWith(Response.status(404).build()); 
       return; 
      } 
     } 
    } 
} 

我正在玩這個,並把一個工作中的POC放在一起。您可以結帳Github Repo

+0

我喜歡那樣!它的簡單而不是黑客。我沒有探索澤西島的這種能力,感謝您的幫助! –