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.

Solutions

  1. Use getInfo() in the message to locate the exact command (groupKey/commandKey)
  2. Check each commandProperties @HystrixProperty name against HystrixPropertiesManager.COMMAND_PROP_MAP for your exact Hystrix version
  3. Confirm value strings parse: ints for timeouts/window sizes, true/false for booleans, THREAD/SEMAPHORE for execution.isolation.strategy
  4. 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

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


AI-assisted analysis of Netflix/Hystrix@5ce3bc58c3 (2026-08-14). Data as JSON: /api/errors/ee777e1bd919c1a2. Report an issue: GitHub.

Appendix: 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)