|
| 1 | +## CompletableFuture 사용 예시 |
| 2 | +>급하게 사용하게 된 CompletableFuture 사용 기록 |
| 3 | +
|
| 4 | +~~~java |
| 5 | +/** |
| 6 | + * 벤더 상세조회 (Async) |
| 7 | + * |
| 8 | + * @param utmCode 벤더 식별 아이디 |
| 9 | + * @return 벤더 상세조회 응답 객체 |
| 10 | + */ |
| 11 | + public DetailedVendorDTO getDetailedVendorAsync(String utmCode) { |
| 12 | + CompletableFuture<List<String>> vendorHasServiceAsync = getVendorHasServiceAsync(utmCode); |
| 13 | + CompletableFuture<List<TokenResponseDTO>> tokensByUtmCodeAsync = getTokensByUtmCodeAsync(utmCode); |
| 14 | + |
| 15 | + DetailedVendorDTO detailedVendorDTO = vendorHasServiceAsync |
| 16 | + .thenCombine(tokensByUtmCodeAsync, |
| 17 | + (services, tokens) -> DetailedVendorDTO.builder() |
| 18 | + .servicesByVendor(services) |
| 19 | + .tokenList(tokens) |
| 20 | + .build() |
| 21 | + ) |
| 22 | + .join(); |
| 23 | + |
| 24 | + return detailedVendorDTO; |
| 25 | + } |
| 26 | + |
| 27 | + private CompletableFuture<List<String>> getVendorHasServiceAsync(String utmCode) { |
| 28 | + CompletableFuture future = new CompletableFuture<>(); |
| 29 | + new Thread(() -> { |
| 30 | + log.info("새로운 쓰레드로 벤더가 사용중인 서비스 목록 조회"); |
| 31 | + List<VendorHasService> vendorHasServiceByUtmCode = vendorHasServiceReadRepository.findVendorHasServiceByUtmCode(utmCode); |
| 32 | + List<String> services = vendorHasServiceByUtmCode.stream() |
| 33 | + .map(DynamoTable::getSk) |
| 34 | + .collect(Collectors.toList()); |
| 35 | + future.complete(services); |
| 36 | + }).start(); |
| 37 | + |
| 38 | + return future; |
| 39 | + } |
| 40 | + |
| 41 | + private CompletableFuture<List<TokenResponseDTO>> getTokensByUtmCodeAsync(String utmCode) { |
| 42 | + CompletableFuture future = new CompletableFuture<>(); |
| 43 | + new Thread(() -> { |
| 44 | + log.info("새로운 쓰레드로 벤더가 사용중인 토큰 목록 조회"); |
| 45 | + List<Token> tokensByUtmCode = tokenReadRepository.findTokensByUtmCode(utmCode); |
| 46 | + List<TokenResponseDTO> tokens = tokensByUtmCode.stream() |
| 47 | + .map(TokenResponseDTO::from) |
| 48 | + .collect(Collectors.toList()); |
| 49 | + future.complete(tokens); |
| 50 | + }).start(); |
| 51 | + |
| 52 | + return future; |
| 53 | + } |
| 54 | +~~~ |
| 55 | + |
| 56 | +### Reference |
| 57 | +- https://brunch.co.kr/@springboot/267 |
0 commit comments