我已经阅读了Jersey文档,它说Jersey在读取实体后会自动关闭连接(例如response.readEntity(SomeObject.class))
但是当抛出异常时,无论是错误的请求还是套接字超时,Jersey都会自动关闭连接,还是应该有一个调用client.close()的finally子句?
不会.client.close()在遇到异常的情况下Jersey也不会调用,JerseyClient也不会实现AutoCloseable.
你可以轻松测试这个.如果在关闭后调用方法,则客户端会抛出IllegalStateException:
Client client = ClientBuilder.newClient();
client.close();
client.target("http://stackoverflow.com").request().get(); // IllegalStateException
Run Code Online (Sandbox Code Playgroud)
但是您可以在捕获异常后调用方法:
Client client = ClientBuilder.newClient();
try {
client.target("http://foo.bar").request().get(); // java.net.ConnectException: Operation timed out
} catch (Exception ex) {
client.target("http://stackoverflow.com").request().get(); // works
}
Run Code Online (Sandbox Code Playgroud)
所以关闭就是你的工作.
更新: JAX-RS 2.1 将使用AutoClosables.
| 归档时间: |
|
| 查看次数: |
5406 次 |
| 最近记录: |