spring boot에서 @Async 어노테이션을 사용할 수 있다. 다만 application context에 task:annotation-driven을 두지 말아야 한다. 즉 아래와 같은 코드를 사용하면 에러가 발생한다.

<!--For @Async-->
<bean id="asyncExecuter" class="java.util.concurrent.Executors" factory-method="newFixedThreadPool">
<constructor-arg value="100" />
</bean>

<task:executor id="threadPoolTaskExecutor" pool-size="5-200" queue-capacity="1000"/>

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


spring boot 자체적으로 이미 Async 기능을 제공하기 때문이다.

xml 설정에도 포함해서 실행한다면, 아래와 같은 에러가 발생할 수 있다. xml 설정을 삭제한다면, 에러는 발생하지 않는다.



configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.



참고자료

https://spring.io/guides/gs/async-method/

Posted by '김용환'
,