반응형
Spring에서 간단한 예제를 돌리던 중 @Async가 동작하지 않는 경우가 발생하였다.
동작하지 않는 경우는 대표적으로 3가지가 있다.
1. 메소드가 public이 아닐 때 -> 이경우에는 @Async가 접근하지 못하여 발생한다.
2. return type이 void가 아닐때 -> 이경우에도 당연히 main함수에서 호출시 값을 기다리게 되는 파라미터형일경우 아무리 비동기여도 값을 기다리게 되므로 비동기로 처리가 안된다.
3. 같은 객체내에서 호출시도 안된다.
저같은 경우는 위 3가지를 준수하였음에도 비동기처리가 되지 않았습니다.
간단한 예제라서 @Autowired로 빈에서 가져오지 않고 생성자 타입을 사용해서 DI를 했습니다.
하지만 비동기식으로 처리되지 않는 것을 확인하였고 빈으로 등록해서 사용하였습니다.
이유에 대해서는 몇가지 추측을 하는데 @Async는 미리 Thread Pool을 생성해두고 필요할 때마다 할당해주는 방식입니다.
하지만 요청시 생성자타입으로 그때마다 Service를 주입하는 방식이랑은 맞지 않는 방식인것 같습니다.
생성자 타입 으로 생성하였을 경우 비동기 처리가 되지 않습니다.
// public main() {
// redbinService = new RedbinService();
// }
@Autowired
RedbinService redbinService;
반응형
'Spring' 카테고리의 다른 글
스프링: BeanValidation (0) | 2022.10.11 |
---|---|
스프링 MVC (0) | 2020.08.09 |
@Configuration을 이용한 설정 (0) | 2020.08.09 |
bean 이란 (0) | 2020.08.09 |
Spring : 이미지업로드 및 이미지 반환. (0) | 2020.07.31 |