복붙노트

[SPRING] 봄 부팅. 어노테이션으로 TaskExecutor를 만드는 방법?

SPRING

봄 부팅. 어노테이션으로 TaskExecutor를 만드는 방법?

비동기 적으로 실행해야하는 메소드 중 하나를 사용하여 Spring Boot 애플리케이션에서 @Service 클래스를 작성했습니다. 메서드를 읽으려면 @Async 주석을 달고 TaskExecutor 빈을 실행해야합니다. 하지만 스프링 매뉴얼 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html XML 설정없이 Annotation으로 TaskExecutor를 실행하는 방법에 대한 정보 나 예제를 찾지 못했습니다. 주석없이 XML없이 Spring Boot에서 TaskExecutor 빈을 생성 할 수 있습니까? 여기 내 서비스 클래스 :

@Service
public class CatalogPageServiceImpl implements CatalogPageService {

    @Override
    public void processPagesList(List<CatalogPage> catalogPageList) {
        for (CatalogPage catalogPage:catalogPageList){
            processPage(catalogPage);
        }
    }

    @Override
    @Async("locationPageExecutor")
    public void processPage(CatalogPage catalogPage) {
        System.out.println("print from Async method "+catalogPage.getUrl());
    }
}

해결법

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

    1.스프링 부트 애플리케이션 클래스에 @Bean 메소드를 추가하십시오.

    스프링 부트 애플리케이션 클래스에 @Bean 메소드를 추가하십시오.

    @SpringBootApplication
    @EnableAsync
    public class MySpringBootApp {
    
        @Bean
        public TaskExecutor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(5);
            executor.setMaxPoolSize(10);
            executor.setQueueCapacity(25);
            return executor;
        }
    
        public static void main(String[] args) {
            // ...
        }
    }
    

    XML 대신 Java config를 사용하여 Spring을 설정하는 방법에 대한 Spring Framework 참조 문서의 Java 기반 컨테이너 구성을 참조하십시오.

    @SpringBootApplication에는 @Configuration이 이미 포함되어 있으므로 @Configuration을 클래스에 추가 할 필요가 없습니다.

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

    2.우선 - 규칙을 살펴 보겠습니다. @Async에는 두 가지 제한 사항이 있습니다.

    우선 - 규칙을 살펴 보겠습니다. @Async에는 두 가지 제한 사항이 있습니다.

    따라서 processPage () 메소드는 별도의 클래스에 있어야합니다.

  3. from https://stackoverflow.com/questions/38370063/spring-boot-how-to-create-taskexecutor-with-annotation by cc-by-sa and MIT license