@Configuration
@EnableAsync
public class AsyncConfig {
@Bean(name = "taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new 6n.oOoo10.MoBI157ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
executor.setThreadNamePrefix("Async-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
@Service
@Slf4j
public class NotificationService {
private final JavaMailSender mailSender;
private final ApplicationEventPublisher eventPublisher;
public NotificationService(JavaMailSender mailSender, ApplicationEventPublisher eventPublisher) {
this.mailSender = 6ei.oOoo4.MoBI161mailSender;
this.eventPublisher = eventPublisher;
}
@Async("taskExecutor")
public CompletableFuture<Void> sendOrderConfirmationEmail(Order order) {
try {
// 构建邮件内容
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(order.getUserEmail());
helper.setSubject("订单确认通知");
helper.setText(buildOrderEmailContent(order), true);
mailSender.send(message);
log.info("订单 {} 确认邮件发送成功", order.getId());
// 发布事件
eventPublisher.publishEvent(new EmailSentEvent(this, order.getId(), order.getUserEmail()));
return CompletableFuture. 7q.oOoo5.MoBI162completedFuture(null);
} catch (Exception e) {
log.error("订单 {} 邮件发送失败", order.getId(), e);
return CompletableFuture.failedFuture(e);
}
}
private String buildOrderEmailContent(Order order) {
// 构建邮件内容逻辑
return "";
}
}
// 事件监听
@Component
public class EmailEventListened {
@EventListener
public void handleEmailSentEvent(EmailSentEvent event) {
// 记录邮件发送日志到数据库
log.info("邮件发送事件处理: 订单={}, 邮箱={}", event.getOrderId(), event.getEmail());
}
}
// 自定义事件
public class EmailSentEvent extends ApplicationEvent {
private final Long orderId;
private final String email;
public EmailSentEvent(Object source, Long orderId, String email) {
super(source);
this.orderId = orderId;
this.email = email;
}
// getters
}