ProcessTerminationFaultProperties.java
package com.ecommerce.trade.infrastructure.messaging;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("ecommerce.trade.fault-injection")
public record ProcessTerminationFaultProperties(
boolean enabled,
ProcessTerminationPoint point,
String targetEventId,
int exitCode
) {
private static final int DEFAULT_EXIT_CODE = 91;
public ProcessTerminationFaultProperties {
exitCode = exitCode == 0 ? DEFAULT_EXIT_CODE : exitCode;
if (exitCode < 1 || exitCode > 255) {
throw new IllegalArgumentException("fault-injection exitCode must be between 1 and 255");
}
if (enabled) {
if (point == null) {
throw new IllegalArgumentException("fault-injection point is required when enabled");
}
if (targetEventId == null || targetEventId.isBlank() || targetEventId.length() > 128) {
throw new IllegalArgumentException(
"fault-injection targetEventId is required and must not exceed 128 characters");
}
}
}
public static ProcessTerminationFaultProperties disabled() {
return new ProcessTerminationFaultProperties(false, null, null, DEFAULT_EXIT_CODE);
}
}