2016-12-01 13 views
5
@RequestMapping(value = "/endpoint", method = RequestMethod.POST) 
    public ResponseEntity<?> endpoint(@RequestBody final ObjectNode data, final HttpServletRequest request) { 
     somefunction(); 
     return new ResponseEntity<>(HttpStatus.OK); 
    } 


public somefunction() { 
..... 
} 

Trong bộ điều khiển lò xo Java, tôi có điểm cuối. Khi điểm cuối này được gọi, tôi muốn nó quay trở lại trực tiếp, không đợi somefunction() để kết thúc. Bất cứ ai có thể dạy tôi làm thế nào để đối phó với điều này?Làm thế nào để làm cho Java gọi lại api gọi lại ngay lập tức không chờ đợi?

+0

bắt đầu 'somefunction()' trên khác 'thread' – Jerry06

+0

RxJava được sử dụng cho điều đó – xenteros

Trả lời

2

thay đổi dòng

somefunction(); 

new Thread() 
{ 
    public void run() { 
     somefunction(); 
    } 
}.start(); 
1

Bạn nên sử dụng RxJava mà cung cấp cho bạn những lời hứa. Bạn sẽ có DefferedResult sẽ được trả về không đồng bộ, vì vậy nó sẽ không chặn các phương thức khác được thực hiện.

Ví dụ:

@RequestMapping("/getAMessageFutureAsync") 
public DeferredResult<Message> getAMessageFutureAsync() { 
    DeferredResult<Message> deffered = new DeferredResult<>(90000); 
    CompletableFuture<Message> f = this.service1.getAMessageFuture(); 
    f.whenComplete((res, ex) -> { 
     if (ex != null) { 
      deffered.setErrorResult(ex); 
     } else { 
      deffered.setResult(res); 
     } 
    }); 
    return deffered; 
} 

--Code source and tutorial

5

Nếu bạn đang sử dụng Java 8, bạn có thể sử dụng Executor lớp mới:

@RequestMapping(value = "/endpoint", method = RequestMethod.POST) 
public ResponseEntity<?> endpoint(@RequestBody final ObjectNode data, final HttpServletRequest request) { 
    Executors.newScheduledThreadPool(1).schedule(
     () -> somefunction(), 
     10, TimeUnit.SECONDS 
    ); 
    return new ResponseEntity<>(HttpStatus.ACCEPTED); 
} 

này sẽ:

  1. Lịch biểu somefunction() để chạy sau khi trì hoãn 10 giây.
  2. Trả lại HTTP 202 Được chấp nhận (đó là những gì bạn nên trả lại khi điểm cuối POST của bạn không thực sự tạo bất kỳ thứ gì tại chỗ).
  3. Chạy somefunction() sau 10 giây đã trôi qua.
Các vấn đề liên quan