[SPRING] Spring @Async with CompletableFuture
SPRINGSpring @Async with CompletableFuture
나는이 코드에 대해 의심이있다 :
@Async
public CompletableFuture<String> doFoo() {
CompletableFuture<String> fooFuture = new CompletableFuture<>();
try {
String fooResult = longOp();
fooFuture.complete(fooResult);
} catch (Exception e) {
fooFuture.completeExceptionally(e);
}
return fooFuture;
}
문제는 doFoo가 longOp가 (올바르게 또는 예외적으로) 종료 된 후에 만 fooFoo를 반환하고 따라서 이미 완료된 미래를 반환하거나 Spring이 일부 마술을 수행하고 본문을 실행하기 전에 반환하는지 여부입니다. longOp ()에서 코드가 블로킹 된 경우 계산이 실행 프로그램에 공급되고 있음을 어떻게 표현하겠습니까?
아마 이것? 다른 방법이라도?
@Async
public CompletableFuture<String> doFoo() {
CompletableFuture<String> completableFuture = new CompletableFuture<>();
CompletableFuture.runAsync(() -> {
try {
String fooResult = longOp();
completableFuture.complete(fooResult);
} catch (Exception e) {
completableFuture.completeExceptionally(e);
}
});
return completableFuture;
}
해결법
-
==============================
1.Spring은 실제로 커버 안의 모든 작업을 수행하므로 CompletableFuture를 직접 만들 필요가 없습니다. 기본적으로 @Async 주석을 추가하는 것은 원래 메소드 (주석없이)를 다음과 같이 호출 한 것과 같습니다.
Spring은 실제로 커버 안의 모든 작업을 수행하므로 CompletableFuture를 직접 만들 필요가 없습니다. 기본적으로 @Async 주석을 추가하는 것은 원래 메소드 (주석없이)를 다음과 같이 호출 한 것과 같습니다.
CompletableFuture<User> future = CompletableFuture.runAsync(() -> doFoo());
두 번째 질문에 대해서는 실행자에게 피드를 제공하기 위해 다음과 같이 @Async 주석의 값에 executor bean 이름을 지정할 수있다.
@Async("myExecutor") public CompletableFuture<User> findUser(String usernameString) throws InterruptedException { User fooResult = longOp(usernameString); return CompletableFuture.completedFuture(fooResult); }
위의 내용은 마치 원래의 메서드를 호출 한 것처럼 다음과 같습니다.
CompletableFuture<User> future = CompletableFuture.runAsync(() -> doFoo(), myExecutor);
그리고 모든 예외적 인 논리는 그 메소드에서 반환 된 CompletableFuture로 처리 할 것입니다.
from https://stackoverflow.com/questions/47351435/spring-async-with-completablefuture by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RestTemplate 기본 또는 다이제스트 현재 httpclient (4.x) 인증 (0) | 2019.03.21 |
---|---|
[SPRING] JSR-303과 Traditional Bean Validation 둘 다 사용 하시겠습니까? (0) | 2019.03.21 |
[SPRING] Spring에서 웹 서비스로부터 이미지를 보내는 방법 (0) | 2019.03.21 |
[SPRING] Spring : 중첩 예외는 java.lang.NoClassDefFoundError : org / aopalliance / aop / Advice입니다. (0) | 2019.03.21 |
[SPRING] Spring Boot : 다음 후보들 중에서 하나의 메인 클래스를 찾을 수 없습니다. (0) | 2019.03.20 |