RemoteClientProperties.java
package com.ecommerce.trade.infrastructure.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.time.Duration;
@ConfigurationProperties("ecommerce.trade.client")
public record RemoteClientProperties(
Duration connectTimeout,
Duration readTimeout,
String catalogBaseUrl,
String identityBaseUrl,
String inventoryBaseUrl,
String marketingBaseUrl
) {
public RemoteClientProperties {
connectTimeout = connectTimeout == null ? Duration.ofMillis(500) : connectTimeout;
readTimeout = readTimeout == null ? Duration.ofMillis(1500) : readTimeout;
catalogBaseUrl = catalogBaseUrl == null ? "http://catalog-service" : catalogBaseUrl;
identityBaseUrl = identityBaseUrl == null ? "http://identity-service" : identityBaseUrl;
inventoryBaseUrl = inventoryBaseUrl == null ? "http://inventory-service" : inventoryBaseUrl;
marketingBaseUrl = marketingBaseUrl == null ? "http://marketing-service" : marketingBaseUrl;
requirePositive(connectTimeout, "connect-timeout");
requirePositive(readTimeout, "read-timeout");
requireBaseUrl(catalogBaseUrl, "catalog-base-url");
requireBaseUrl(identityBaseUrl, "identity-base-url");
requireBaseUrl(inventoryBaseUrl, "inventory-base-url");
requireBaseUrl(marketingBaseUrl, "marketing-base-url");
}
private static void requirePositive(Duration value, String property) {
if (value.isZero() || value.isNegative()) {
throw new IllegalArgumentException("ecommerce.trade.client." + property + " must be positive");
}
}
private static void requireBaseUrl(String value, String property) {
if (value.isBlank()) {
throw new IllegalArgumentException("ecommerce.trade.client." + property + " must not be blank");
}
}
}