FlashSaleOrderRecoveryJob.java
package com.ecommerce.trade.application.service;
import com.ecommerce.trade.infrastructure.config.TradeSchedulingConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(
prefix = "ecommerce.trade.flash-sale-consumer",
name = "enabled",
havingValue = "true")
public class FlashSaleOrderRecoveryJob {
private static final Logger log = LoggerFactory.getLogger(FlashSaleOrderRecoveryJob.class);
private final FlashSaleOrderService orderService;
public FlashSaleOrderRecoveryJob(FlashSaleOrderService orderService) {
this.orderService = orderService;
}
@Scheduled(
fixedDelayString = "${ecommerce.trade.flash-sale-consumer.recovery-delay:1000}",
scheduler = TradeSchedulingConfig.FLASH_SALE_SCHEDULER)
public void recover() {
for (String requestToken : orderService.findRecoverableTokens()) {
try {
orderService.recover(requestToken);
} catch (RuntimeException exception) {
log.warn("Flash-sale order recovery failed: requestToken={}", requestToken, exception);
}
}
}
}