@Async return type

0

SpringBoot

목록 보기
12/12

Scheduler를 돌려야하는데 에러가 떴다.

ERROR 1182850 --- [   scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task
java.lang.IllegalArgumentException: Invalid return type for async method (only Future and void supported): class java.lang.Object

리턴타입에 only Future and void 만 와야하는데 class java.lang.Object 이 왔다는거다.

문제가 된 코드를 보면

return 타입이 runCatching 때문에 Result<Unit> 으로 설정해놨었는데 여기가 문제가 됐던것이다.
Controller랑 연결해서 테스트해보려고 runCatching을 붙여뒀던건데 까먹고 안지워서 그랬던것이다.🥲

이 문제로 @Async를 붙일때 리턴타입이 제한된다는 것을 알았다.


https://github.com/spring-projects/spring-framework/blob/main/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionAspectSupport.java#L287
위의 링크를 보면
@Async가 붙어있는 메소드의 returnType이
1. CompletableFuture.class
2. org.springframework.util.concurrent.ListenableFuture.class
3. Future.class
4. void.class
5. kotlin.Unit
이 아니면 내가 만났던 에러인

IllegalArgumentException(
					"Invalid return type for async method (only Future and void supported): " + returnType);

을 내뱉는 것을 확인할 수 있다.

profile
백엔드를 공부하고 있습니다.

0개의 댓글