복붙노트

[SPRING] Spring @Async v 호출 가능 컨트롤러 (비동기 컨트롤러, 서블릿 3)

SPRING

Spring @Async v 호출 가능 컨트롤러 (비동기 컨트롤러, 서블릿 3)

Callable을 사용하여 Spring에서 @Async와 Servlet 3 비동기 요청 구현을 사용하는 일반적인 사용 사례를 알고 싶습니다.

알다시피 @Async는 모든 메서드 (특히 모든 서비스 메서드)를 비동기 적으로 실행하기위한 것입니다.

@Async
void doSomething(String s) {
// this will be executed asynchronously
}

호출 가능을 반환하는 컨트롤러

  @RequestMapping("/view")
public Callable<String> callableWithView(final Model model) {
    return new Callable<String>() {
        @Override
        public String call() throws Exception {
            Thread.sleep(2000);
            model.addAttribute("foo", "bar");
            model.addAttribute("fruit", "apple");
            return "views/html";
        }
    };
}

나는 무엇을 사용해야하는지 혼란 스럽다. 비동기 서블릿 / 컨트롤러 및 스프링 @Async를 함께 사용하면 어떤 영향이 있습니까?

해결법

  1. ==============================

    1.이 게시물에는 찾고있는 것에 대한 설명이 있습니다.

    이 게시물에는 찾고있는 것에 대한 설명이 있습니다.

    발췌 :

    호출 가능 반환 값 유형은 컨트롤러 메서드를 비동기로 만듭니다. 이것은 보통 긴 폴링과 같은 상황에서 사용됩니다. 자세한 내용은 같은 저자가이 게시물을 읽으십시오.

    또한 호출 가능 (callable)은 Runnable의 대안이며, 의미 상으로 결과를 반환하고 검사 된 예외를 throw 할 수 있습니다.

    방법이 있다고 해봅시다.

    public String aMethod(){
    
    }
    

    Callable 인터페이스를 반환하면 비동기로 만들 수 있습니다.

    public Callable<String>  aMethod(){
    
    }
    
  2. ==============================

    2.Callable 인터페이스를 사용하여 단일 요청 성능을 향상시킬 수 없으면 어떤 경우에는 더 많은 요청을하는 것이 도움이됩니다. 응답 유형이 무효 인 경우, callable 대신 runnable을 사용할 수 있으므로 runnable을 사용하면 단일 요청 응답 시간을 향상시킬 수 있습니다.

    Callable 인터페이스를 사용하여 단일 요청 성능을 향상시킬 수 없으면 어떤 경우에는 더 많은 요청을하는 것이 도움이됩니다. 응답 유형이 무효 인 경우, callable 대신 runnable을 사용할 수 있으므로 runnable을 사용하면 단일 요청 응답 시간을 향상시킬 수 있습니다.

  3. from https://stackoverflow.com/questions/17167020/when-to-use-spring-async-vs-callable-controller-async-controller-servlet-3 by cc-by-sa and MIT license