복붙노트

[SPRING] Spring 3 : @Async 주석이 달린 메소드를 TaskExecutor에서 호출하는 법

SPRING

Spring 3 : @Async 주석이 달린 메소드를 TaskExecutor에서 호출하는 법

Spring에서 비동기 태스크 실행을 처음 사용하기 때문에 바보 같은 질문이 들리면 저를 용서해주십시오.

@Async annotation은 메소드 레벨에서 Spring 3.x 이후에 도입되어 그 메소드의 호출이 비동기 적으로 발생한다는 것을 읽었습니다. 또한 스프링 설정 파일에서 ThreadPoolTaskExecutor를 구성 할 수 있다고 읽었습니다.

내가 이해할 수없는 것은 tak 실행기에서 @Async 주석이 달린 메서드를 호출하는 방법을 가정 해 보겠습니다. AsyncTaskExecutor

이전에 우리는 수업 시간에 비슷한 것을 해왔습니다.

@Autowired protected AsyncTaskExecutor executor;

그리고

executor.submit(<Some Runnable or Callable task>)

@Async 주석이 달린 메서드와 TaskExecutor 간의 관계를 이해할 수 없습니다.

인터넷을 통해 많은 검색을 시도했지만 이것에 대해서는 아무 것도 얻을 수 없었습니다.

누군가가 같은 것을 제공 할 수 있습니까?

해결법

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

    1.다음은 @Async 사용의 예입니다.

    다음은 @Async 사용의 예입니다.

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

    다른 클래스에서이 메서드를 호출하면 비동기 적으로 실행됩니다. 반환 값을 원하면 미래를 사용하십시오.

    @Async
    Future<String> returnSomething(int i) {
        // this will be executed asynchronously
    }
    

    @Async와 TaskExecutor의 관계는 @Async가 백그라운드에서 TaskExecutor를 사용한다는 것입니다. 문서에서 :

    따라서 기본 실행 프로그램을 설정하려면 스프링 구성에이 값을 추가하십시오.

    <task:annotation-driven executor="myExecutor" />
    

    또는 한 번만 사용하기 위해 특정 실행 프로그램을 사용하려고 시도하십시오.

    @Async("otherExecutor")
    

    http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support-async를 참조하십시오.

  2. ==============================

    2.완전한 예

    완전한 예

  3. ==============================

    3.설정 파일에서 @Async (풀 이름)를 가진 스레드 풀 이름과 메소드가있는 주석 구동 태스크가 해당 풀의 일부로 실행되어야한다. 이렇게하면 @Async 주석이있는 프록시 클래스가 만들어져 모든 스레드에 대해 실행됩니다.

    설정 파일에서 @Async (풀 이름)를 가진 스레드 풀 이름과 메소드가있는 주석 구동 태스크가 해당 풀의 일부로 실행되어야한다. 이렇게하면 @Async 주석이있는 프록시 클래스가 만들어져 모든 스레드에 대해 실행됩니다.

  4. ==============================

    4.메서드에 @Async를 추가하고 응용 프로그램 컨텍스트에 다음을 추가 할 수 있습니다.

    메서드에 @Async를 추가하고 응용 프로그램 컨텍스트에 다음을 추가 할 수 있습니다.

        <task:annotation-driven executor="asynExecutor"/>   
        <task:executor id="asynExecutor" pool-size="5" />
    
  5. from https://stackoverflow.com/questions/17746372/spring-3-how-to-call-async-annotated-methods-from-the-taskexecutor by cc-by-sa and MIT license