我们可以在运行时在球衣中添加资源路径吗?

Can we add resource path at runtime in jersey?

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

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

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

并使用 String path = uriInfo.getPathParameters().getFirst("subResources");

方法获取 subResources

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

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

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

该示例假设 classes 已经加载到 class 路径中。修改示例以查看文件夹和加载新的 jar 文件应该很容易。参见 How to load a jar file at runtime

基本步骤是:

  1. 使用 ContainerLifecycleListener 获取容器的引用
  2. 检查更新文件夹,加载所有 jar 文件
  3. 扫描资源 classes
  4. 创建一个新的 ResourceConfig 并添加所有资源(旧的和新的)
  5. 调用 container.update(newResourceConfig) 以使用更新后的配置

我不建议实施卸载 jar 或重新加载现有 classes 之类的操作 - 您将不得不处理很多潜在问题。如果您需要重新加载,请寻找现有的解决方案,例如 jrebel vm 或 OSGi。