2017-09-27 211 views
0

我想为客户端http缓存配置Resteasy客户端。我想在客户端拥有一个持久性缓存,这可以让我的客户端应用程序重新启动。随着谷歌的帮助下,我才得以建立了我的RestEasy的客户是这样的:Resteasy客户端Http缓存

File cacheDir = new File("C:\\Users\\MyUser\\Desktop\\cache"); 
CacheConfig config = CacheConfig.DEFAULT; 
FileResourceFactory resourceFactory = new FileResourceFactory(cacheDir); 
ManagedHttpCacheStorage cacheStorage = new ManagedHttpCacheStorage(config); 
CloseableHttpClient client = CachingHttpClients.custom() 
      .setCacheConfig(config) 
      .setResourceFactory(resourceFactory) 
      .setHttpCacheStorage(cacheStorage) 
      .setDeleteCache(false) 
      .build(); 
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(client); 
ResteasyClient rclient = new ResteasyClientBuilder().httpEngine(engine).build(); 

我可以看到RestEasy的客户端使用的缓存机制。在调用请求两次时,第二个请求比第一个请求快得多。但是,关闭客户端时,缓存不会保留。此外,在设置客户端时,从不会在指定的目录中写入文件。有什么我失踪?我需要在重新启动后从文件系统恢复缓存。

回答

0

当我运行没有resteasy层的代码时,httpclient为缓存目录中的每个请求都成功地存储了一个文件。当缓存目录不存在时抛出预期的错误。

至于在重新启动时高速缓存的恢复,似乎ManagedHttpCacheStorage没有设计成用来恢复重启缓存条目,所以它可以存储到文件系统,与FileResourceFactory使用时,但不会从文件加载系统。

因此,只有memcached实现似乎提供了此功能,缓存的对象在应用程序重新启动时生存,而ehcache似乎没有在开源项目中提供此功能。