如何使用RestTemplate实现异步休息Web服务客户端?

时间:2016-07-21 17:17:57

标签: java spring resttemplate

我想使用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注释得到了这个想法但却不知道如何准确实现。 你能帮忙吗?

1 个答案:

答案 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会“看到”注释。