我有一个java应用程序。我的应用程序调用外部服务,然后将数据存储到数据库中。我想首先在db中检查记录,如果没有找到,则调用外部服务。我不想为此使用手工制作的解决方案,我希望有一个库或框架可以做到这一点。我使用spring和hibernate 4.我能做些什么来尽可能优雅地做到这一点?
答案 0 :(得分:0)
除非您对可以对外部系统进行的呼叫数量有严格限制,否则您可能需要考虑同时执行两个呼叫并使用先响应的任何一个。
// Create futures for the two tasks to run concurrently
CompletableFuture<MyObject> checkCache = CompletableFuture.supplyAsync(() -> cache.lookup(key));
CompletableFuture<MyObject> callExternal = CompletableFuture.supplyAsync(() -> externalService.lookup(key));
// run the two operations, and react to the first to complete
checkCache.applyToEither(callExternal,
result -> {
cache.store(key, result);
return result;
})
.applyTo(result -> // do something with the returned value);
这是使用Java 8,但如果您使用的是早期版本的Java,则可以使用Guava等。