FlashSaleConsumerProperties.java
package com.ecommerce.trade.infrastructure.messaging;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
import java.time.Duration;
@Validated
@ConfigurationProperties("ecommerce.trade.flash-sale-consumer")
public record FlashSaleConsumerProperties(
boolean enabled,
@NotBlank String endpoints,
@NotBlank String topic,
@NotBlank String consumerGroup,
@Min(1) @Max(64) int batchSize,
@NotNull Duration invisibleDuration,
@NotNull Duration awaitDuration,
@Min(1) @Max(100) int maxAttempts,
@Min(100) long recoveryDelay,
@Min(1) @Max(500) int recoveryBatchSize,
@NotNull Duration recoveryLease
) {
public FlashSaleConsumerProperties {
invisibleDuration = invisibleDuration == null ? Duration.ofSeconds(30) : invisibleDuration;
awaitDuration = awaitDuration == null ? Duration.ofSeconds(5) : awaitDuration;
maxAttempts = maxAttempts <= 0 ? 16 : maxAttempts;
recoveryDelay = recoveryDelay <= 0 ? 1000 : recoveryDelay;
recoveryBatchSize = recoveryBatchSize <= 0 ? 100 : recoveryBatchSize;
recoveryLease = recoveryLease == null ? Duration.ofSeconds(30) : recoveryLease;
}
}