Back/Spring Java

@Async 비동기 호출

밍꿔 2020. 4. 27. 16:47


반응형

 

실행중인 프로세스 이외의 비동기 작업이 필요한 대상이 있다면

 

해당 메서드에 @Async어노테이션을 추가하면 된다.

 

@Async
public void runAsync() {
    // Run run do run run Aikatsu
}

 

해당 방식은 전통적인 방식으로 동작되는 코드 이다. 매우 간단하다.

 

하지만 다른 스레드로 실행 시키려고자 한다면 @EnableAsync 설정을 따로 해야한다.

 

@Configuration
@EnableAsync
public class AsyncConfiguration {
    private final int ASYNC_THREAD_POOL_SIZE = 5;

    @Bean(name = "threadPoolTaskExecutor")
    public Executor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(ASYNC_THREAD_POOL_SIZE);
        taskExecutor.setMaxPoolSize(ASYNC_THREAD_POOL_SIZE);
        taskExecutor.setQueueCapacity(Integer.MAX_VALUE);
        taskExecutor.setThreadNamePrefix("threadPoolTaskExecutor-");
        taskExecutor.initialize();
        return taskExecutor;
    }
}

 

Executor를 직접 생성하여 Bean으로 등록한다.

 

이렇게 생성한 실행 Executor는 아래와 같이 별칭으로 사용 가능하다.

 

@Async("threadPoolTaskExecutor")
public void runAsync() {
    // Run run do run run Aikatsu
}

 

 

이렇게 매번 별칭을 주어 설정하는것이 아니라 일괄 처리를 하려면,

 

@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        return new ThreadPoolTaskExecutor();
    }
}

 

위의 코드와 같이 설정하고 아래의 형태처럼 처음에 보여줬던 기본 형태로 호출 가능하다.

 

@Async
public void runAsync() {
    // Run run do run run Aikatsu
}

 

 

 

반응형