2016-07-21 7 views
0

Ich möchte Rest Webservice Aufruf asynchron mit Feder 3.1 Rest Vorlage aufrufen. Momentan verwenden wir die Resttemplate.getForObject-Methode, um den Rest-Webservice aufzurufen. Jetzt müssen wir gemäß der Anforderung eine andere Webservice-Methode gleichzeitig mit der bestehenden aufrufen. Wir rufen diesen Methodenaufruf von Stateless Session-Bean EJB 2.1 auf, indem wir die Methodenklasse instanziieren.Wie Implementieren asynchronen Rest Webservice-Client mit RestTemplate?

Beispielcode ist wie folgt: -

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; 
} 

Wir müssen jetzt getUserDetails Methodenaufruf asynchron machen. Ich habe die Idee mit @ Async Annotation, aber nicht bewusst, wie genau zu implementieren. Können Sie bitte dabei helfen.

Antwort

0

Ich verwendete this Tutorial, um eine ähnliche Aufgabe zu erfüllen. Ich habe einige Änderungen vorgenommen. Hier ist, wie es funktioniert.

1) Erstellen Sie eine Konfigurationsklasse und stellen Sie sicher, dass sie von ApplicationContext gescannt wird. Ich benutze 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) Beschriften Sie Ihre Methode mit

@Async("threadPoolTaskExecutor") 

Ihre Methode muss entweder nichtig oder Zukunft zurückzukehren.

3) Stellen Sie sicher, dass die asynchrone Methode öffentlich ist und von einer anderen Klasse aufgerufen wird. So "sieht" Spring die Annotation, wenn die Methode reflektiv aufgerufen wird.

Verwandte Themen