我们可以在运动时添加资源路径吗?

时间:2015-01-15 08:45:50

标签: java jersey

我想实现一个即插即用的Web服务,我们可以在不同的jar中定义不同的资源,只需将这些jar放在Web服务器的资源文件夹中,服务器就可以加载资源类并将其注册到jersey.I don&#39 ; t想要停止服务器以进行资源更新或添加新资源路径。 有没有办法在运行时使用泽西注册资源? 或者您是否建议另一种处理此问题的模式?

2 个答案:

答案 0 :(得分:4)

启动后无法修改ResourceConfig,但您可以使用更新的值创建一个新的,然后使用新配置重新加载容器。

有一个官方示例显示如何查看文件以进行更改并重新加载容器:https://github.com/jersey/jersey/tree/master/examples/reload

该示例假定类已经在类路径中加载。应该很容易修改示例以观察文件夹并加载新的jar文件。见How to load a jar file at runtime

基本步骤是:

  1. 使用ContainerLifecycleListener获取对容器的引用
  2. 检查文件夹以进行更新,加载所有 jar文件
  3. 扫描资源类
  4. 创建新的ResourceConfig并添加所有资源(新旧)
  5. 致电container.update(newResourceConfig)以使用您的更新配置
  6. 我不建议实现卸载jar或重新加载现有类的东西 - 你必须处理很多潜在的问题。如果您需要重新加载,请查找现有的解决方案,如jrebel vm或OSGi。

答案 1 :(得分:-1)

我用@Path("/{subResources:.*}") 这回归任何可能性

并使用此属性@Context private UriInfo uriInfo;获取值

并使用subResources

获取方法的String path = uriInfo.getPathParameters().getFirst("subResources");

使用此字符串可以拆分或使用正则表达式。