비동기 처리를 위한 방법이지만 사용 방식과 특성이 약간 다르다.
@Async in Spring
CompletableFuture
주요 차이점
CompletableFuture.runAsync() - void Method 에 사용
CompletableFuture.supplyAsync() - return 있는 Method 에 사용
CompletableFuture 사용 예
public CompletableFuture<RsData> send(String to, String subject, String body) {
if (to.endsWith("@test.com")) return CompletableFuture.completedFuture(RsData.of("S-2", "메일이 발송되었습니다."));
return CompletableFuture.supplyAsync(() -> {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
mimeMessageHelper.setTo(to); // 메일 수신자
mimeMessageHelper.setSubject(subject); // 메일 제목
mimeMessageHelper.setText(body, true); // 메일 본문 내용, HTML 여부
mailSender.send(mimeMessage);
return RsData.of("S-1", "메일이 발송되었습니다.");
} catch (MessagingException e) {
return RsData.of("F-1", "메일이 발송되지 않았습니다.");
}
});
}