【发布时间】:2018-01-25 21:59:29
【问题描述】:
我正在使用基于 TCP 的 Spring Integration 编写缓存服务。我在服务类中有一个方法,它使用服务激活器调用并从缓存中返回值。我需要在此方法中创建一个异步线程,以防缓存未命中以异步加载数据,而调用服务激活器线程应立即返回空值。服务java方法代码如下。
public Object getValue(Object key){
Object valueObj = cache.get(key);
if(null == valueObj) {
taskExecutor.execute(new AsyncDataLoader(key));
}
return valueObj;
}
private class AsyncDataLoader implements Runnable{
private Object key;
public AsyncDataLoader(Object key){
this.key = key;
}
@Override
public void run() {
try {
Object valueObj = dataClient.getData(key);
put(key, valueObj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Spring集成部分:
<int:service-activator input-channel="inputObjChannel"
ref="myService" method="getValue" />
但不是服务激活器调用线程立即返回,而是等待 AsyncDataLoader 完成。有什么办法可以实现异步数据加载?
【问题讨论】:
标签: java spring asynchronous spring-integration