假设我有一个 Java 应用程序正在运行,并且我提供了 RESTful Web 服务调用(通过 Java Jersey)。首先,我对 HTTP RESTful 请求(或 servlet 请求)的每次调用都运行在与主线程不同的线程上是对的吗?如果是这样,如果我提供一个 RESTful 调用来终止应用程序,它如何到达主线程(由 main() 方法启动的线程)来终止它并随后停止程序?
注意:我问这个的原因是我需要优雅地关闭主线程(和程序)。
假设我有一个 Java 应用程序正在运行,并且我提供了 RESTful Web 服务调用(通过 Java Jersey)。首先,我对 HTTP RESTful 请求(或 servlet 请求)的每次调用都运行在与主线程不同的线程上是对的吗?如果是这样,如果我提供一个 RESTful 调用来终止应用程序,它如何到达主线程(由 main() 方法启动的线程)来终止它并随后停止程序?
注意:我问这个的原因是我需要优雅地关闭主线程(和程序)。
你的 restful 服务应该像对待任何其他请求一样对待关闭请求。
例如,如果您的应用是在线商店,您可能会调用类似processOrder
或getInventory
。这些调用可以访问您应用程序中的许多内容,对吗?好吧,只需拨打一个名为 的新电话shutdown
。此调用将关闭未来调用的大门,等待现有调用完成,将内存中的信息保存到 DB,以及其他安全关闭过程。
这真的只是另一个电话。我不会太担心从调用中“停止主要方法” - 考虑逻辑行为,而不是技术行为。
它会出现在泽西岛,你正在寻找client.destroy();
.
Jersey 服务是
com.sun.net.httpserver.HttpServer`
...您通过调用创建的
com.sun.jersey.api.container.httpserver.HttpServerFactory.create(...)
假设您可以获得 HttpServer 实例,您可以通过调用其上的stop(int)
方法来关闭服务。您没有理由不能从您的请求处理程序之一执行此操作。