본문 바로가기

Spring

Spring : @Async 비동기처리 안될 때

반응형

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