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);
을 내뱉는 것을 확인할 수 있다.