我想使用Spring3.1REST模板异步调用rest webservice调用。目前我们使用Resttemplate.getForObject方法来调用rest we服务。现在,根据需求,我们必须在调用现有方法的同时调用另一个webservice方法。我们通过实例化方法类从EJB2.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注解得到了这个想法,但不知道如何准确地实现。你能帮个忙吗。
发布于 2016-07-22 01:37:25
我使用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就会“看到”注释。
https://stackoverflow.com/questions/38510522
复制相似问题