Netflix/Hystrix · error · HystrixPropertyException
Failed to set Command properties. {}
Error message
Failed to set Command properties. {} What it means
Same wrapper path as the thread-pool error, but for the commandProperties attribute: when HystrixPropertiesManager.initializeCommandProperties throws IllegalArgumentException (unknown command property name, or a value that cannot be parsed to int/boolean/enum), GenericSetterBuilder.build() wraps it in HystrixPropertyException with the command's keys appended. It fires the first time the annotated method executes and the Setter is constructed.
Source
Thrown at hystrix-contrib/hystrix-javanica/src/main/java/com/netflix/hystrix/contrib/javanica/command/GenericSetterBuilder.java:88
*
* @return the instance of {@link HystrixCommand.Setter}
*/
public HystrixCommand.Setter build() throws HystrixPropertyException {
HystrixCommand.Setter setter = HystrixCommand.Setter
.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey))
.andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
if (StringUtils.isNotBlank(threadPoolKey)) {
setter.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey(threadPoolKey));
}
try {
setter.andThreadPoolPropertiesDefaults(HystrixPropertiesManager.initializeThreadPoolProperties(threadPoolProperties));
} catch (IllegalArgumentException e) {
throw new HystrixPropertyException("Failed to set Thread Pool properties. " + getInfo(), e);
}
try {
setter.andCommandPropertiesDefaults(HystrixPropertiesManager.initializeCommandProperties(commandProperties));
} catch (IllegalArgumentException e) {
throw new HystrixPropertyException("Failed to set Command properties. " + getInfo(), e);
}
return setter;
}
// todo dmgcodevil: it would be better to reuse the code from build() method
public HystrixObservableCommand.Setter buildObservableCommandSetter() {
HystrixObservableCommand.Setter setter = HystrixObservableCommand.Setter
.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey))
.andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
try {
setter.andCommandPropertiesDefaults(HystrixPropertiesManager.initializeCommandProperties(commandProperties));
} catch (IllegalArgumentException e) {
throw new HystrixPropertyException("Failed to set Command properties. " + getInfo(), e);
}
return setter;
}
public HystrixCollapser.Setter buildCollapserCommandSetter(){View on GitHub (pinned to 5ce3bc58c3)
Solutions
- Use getInfo() in the message to locate the exact command (groupKey/commandKey)
- Check each commandProperties @HystrixProperty name against HystrixPropertiesManager.COMMAND_PROP_MAP for your exact Hystrix version
- Confirm value strings parse: ints for timeouts/window sizes, true/false for booleans, THREAD/SEMAPHORE for execution.isolation.strategy
- Correct or remove the bad property; redeploy
Example fix
// before @HystrixProperty(name = "execution.isolation.thread.timeoutInMillisecond", value = "1000") // after @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
Defensive patterns
Strategy: validation
Validate before calling
Set<String> VALID_CMD = new HashSet<>(Arrays.asList(
"execution.isolation.strategy", "execution.isolation.thread.timeoutInMilliseconds",
"execution.isolation.semaphore.maxConcurrentRequests", "circuitBreaker.requestVolumeThreshold",
"circuitBreaker.errorThresholdPercentage", "metrics.rollingStats.timeInMilliseconds" /* ... full map */ ));
for (Method m : clazz.getDeclaredMethods()) {
HystrixCommand a = m.getAnnotation(HystrixCommand.class);
if (a == null) continue;
for (HystrixProperty p : a.commandProperties()) {
if (!VALID_CMD.contains(p.name()))
throw new IllegalStateException(m + " unknown command property " + p.name());
}
} Try / catch
catch (HystrixPropertyException e) { throw new IllegalStateException("Fix @HystrixCommand config: " + e.getMessage(), e); } Prevention
- Copy property names from HystrixPropertiesManager source for your exact version
- Never hand-type long dotted names; use constants or copy-paste from passing commands
- Add integration test invoking each annotated method once so config errors fail CI
When it happens
Trigger: @HystrixCommand(commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMillisecond", value = "1000") }) (typo'd name), or value = "fast" for an int property like execution.isolation.thread.timeoutInMilliseconds, or an invalid enum value for execution.isolation.strategy.
Common situations: Typos in the long dotted property names; copying property names from a different Hystrix version (properties were added/renamed across 1.3.x/1.4.x/1.5.x); injecting property values from external config where an empty or non-numeric placeholder is resolved.
Related errors
- Failed to set Thread Pool properties. {}
- method cannot be annotated with HystrixCommand and HystrixCo
- batch method must be annotated with HystrixCommand annotatio
- unknown {} property: {}
- bad property value. property name '{}'. Expected int value,
AI-assisted analysis of Netflix/Hystrix@5ce3bc58c3 (2026-08-14).
Data as JSON: /api/errors/ee777e1bd919c1a2.
Report an issue: GitHub.