我想使用spring 3.1 rest模板异步调用rest webservice调用。目前我们使用Resttemplate.getForObject方法来调用其余的webservice。现在根据要求,我们必须同时调用另一个webservice方法和现有的webservice方法。我们通过实例化方法类从EJB 2.1无状态会话bean调用此方法调用。
示例代码如下: -
public class MyImplServerBean extends EJBObject{
RestServiceImpl restImpl = new RestServiceImpl();
ArrayList<User> userDetailsList = restImpl.getUserDetails(123);
}
public class RestServiceImpl {
RestTemplate template = new RestTemplate();
public ArrayList<User> getUserDetails(int userId){
ArrayList<User> userList = new ArrayList<User>();
String url = "http://localhost:7001/myUserService/userId";
User user = template.getForObject(url, User.class);
userList.add(user);
return userList;
}
我们现在需要异步调用getUserDetails方法。我使用@Async注释得到了这个想法但却不知道如何准确实现。 你能帮忙吗?
答案 0 :(得分:1)
我使用this教程完成了类似的任务。我做了一些修改。以下是如何使其发挥作用。
1)创建配置类并确保它由ApplicationContext扫描。我使用AnnotationConfigWebApplicationContext。
@EnableAsync
@Configuration
public class AsyncConfiguration implements AsyncConfigurer
{
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor()
{
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
return executor;
}
@Override
public Executor getAsyncExecutor()
{
return new ThreadPoolTaskExecutor();
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler()
{
return new CustomAsyncExceptionHandler();
}
}
2)使用
注释您的方法@Async("threadPoolTaskExecutor")
您的方法必须返回void或Future。
3)确保异步方法是公共的并从另一个类调用。这样,当反射调用方法时,Spring会“看到”注释。