我们可以在运行时在球衣中添加资源路径吗?
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
基本步骤是:
- 使用
ContainerLifecycleListener
获取容器的引用
- 检查更新文件夹,加载所有新 jar 文件
- 扫描资源 classes
- 创建一个新的
ResourceConfig
并添加所有资源(旧的和新的)
- 调用
container.update(newResourceConfig)
以使用更新后的配置
我不建议实施卸载 jar 或重新加载现有 classes 之类的操作 - 您将不得不处理很多潜在问题。如果您需要重新加载,请寻找现有的解决方案,例如 jrebel vm 或 OSGi。
我想实现一个即插即用的 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
基本步骤是:
- 使用
ContainerLifecycleListener
获取容器的引用 - 检查更新文件夹,加载所有新 jar 文件
- 扫描资源 classes
- 创建一个新的
ResourceConfig
并添加所有资源(旧的和新的) - 调用
container.update(newResourceConfig)
以使用更新后的配置
我不建议实施卸载 jar 或重新加载现有 classes 之类的操作 - 您将不得不处理很多潜在问题。如果您需要重新加载,请寻找现有的解决方案,例如 jrebel vm 或 OSGi。