Netflix/Hystrix · error · IllegalArgumentException
unknown {} property: {}
Error message
unknown {} property: {} What it means
HystrixPropertiesManager.initializeProperties looks up each @HystrixProperty name in the type-specific property map (command / thread-pool / collapser) and calls the corresponding setter on the HystrixProperties.Setter. If the name passes the not-blank validation but is not a key in that map, it throws IllegalArgumentException('unknown <type> property: <name>') naming the property category and the unknown name.
Source
Thrown at hystrix-contrib/hystrix-javanica/src/main/java/com/netflix/hystrix/contrib/javanica/conf/HystrixPropertiesManager.java:127
public static HystrixThreadPoolProperties.Setter initializeThreadPoolProperties(List<HystrixProperty> properties) throws IllegalArgumentException {
return initializeProperties(HystrixThreadPoolProperties.Setter(), properties, TP_PROP_MAP, "thread pool");
}
/**
* Creates and sets Hystrix collapser properties.
*
* @param properties the collapser properties
*/
public static HystrixCollapserProperties.Setter initializeCollapserProperties(List<HystrixProperty> properties) {
return initializeProperties(HystrixCollapserProperties.Setter(), properties, COLLAPSER_PROP_MAP, "collapser");
}
private static <S> S initializeProperties(S setter, List<HystrixProperty> properties, Map<String, PropSetter<S, String>> propMap, String type) {
if (properties != null && properties.size() > 0) {
for (HystrixProperty property : properties) {
validate(property);
if (!propMap.containsKey(property.name())) {
throw new IllegalArgumentException("unknown " + type + " property: " + property.name());
}
propMap.get(property.name()).set(setter, property.value());
}
}
return setter;
}
private static void validate(HystrixProperty hystrixProperty) throws IllegalArgumentException {
Validate.notBlank(hystrixProperty.name(), "hystrix property name cannot be null or blank");
}
private static final Map<String, PropSetter<HystrixCommandProperties.Setter, String>> CMD_PROP_MAP =
ImmutableMap.<String, PropSetter<HystrixCommandProperties.Setter, String>>builder()
.put(EXECUTION_ISOLATION_STRATEGY, new PropSetter<HystrixCommandProperties.Setter, String>() {
@Override
public void set(HystrixCommandProperties.Setter setter, String value) throws IllegalArgumentException {
setter.withExecutionIsolationStrategy(toEnum(EXECUTION_ISOLATION_STRATEGY, value, HystrixCommandProperties.ExecutionIsolationStrategy.class,View on GitHub (pinned to 5ce3bc58c3)
Solutions
- Match the error's <type> prefix (command/threadPool/collapser) to know which annotation attribute is wrong
- Move the named property to the correct attribute or fix its spelling (e.g. collapser properties: maxRequestsInBatch, timerDelayInMilliseconds, requestCache.enabled)
- Cross-check names against the *_PROP_MAP constants in HystrixPropertiesManager for your javanica version
- Re-run; failure is deterministic at setter initialization
Example fix
// before
@HystrixCommand(threadPoolProperties = {
@HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
})
// after
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
}) Defensive patterns
Strategy: validation
Validate before calling
void checkProps(HystrixProperty[] props, Set<String> valid, String type) {
for (HystrixProperty p : props)
if (p.name() == null || p.name().trim().isEmpty() || !valid.contains(p.name()))
throw new IllegalStateException("unknown " + type + " property: " + p.name());
}
// checkProps(ann.commandProperties(), COMMAND_PROP_MAP, "command");
// checkProps(ann.threadPoolProperties(), TP_PROP_MAP, "threadPool");
// checkProps(ann.collapserProperties(), COLLAPSER_PROP_MAP, "collapser"); Try / catch
catch (IllegalArgumentException e) { if (e.getMessage().startsWith("unknown")) { log.error("Property placed under wrong attribute or misspelled: {}", e.getMessage()); } throw e; } Prevention
- Group @HystrixProperty blocks by attribute and review during PR
- Use constants for property names shared across commands
- Validate all annotations with a reflection scan at context startup
When it happens
Trigger: Putting a command property (e.g. execution.isolation.strategy) under @HystrixCommand(threadPoolProperties=...), a thread-pool property under commandProperties, any property under @HystrixCollapser(collapserProperties=...) that is not a collapser property (maxRequestsInBatch, timerDelayInMilliseconds, requestCache.enabled), or misspelling any name.
Common situations: Copy-pasting @HystrixProperty blocks between the wrong attribute; property lists reordered during refactoring; names valid in a newer Hystrix version used against an older javanica jar.
Related errors
- bad property value. property name '{}'. Expected int value,
- bad property value. property name '{}'. Expected correct enu
- Failed to set Thread Pool properties. {}
- Failed to set Command properties. {}
- wrong 'weavingMode' property, supported: " + Arrays.toString
AI-assisted analysis of Netflix/Hystrix@5ce3bc58c3 (2026-08-14).
Data as JSON: /api/errors/067d062d773f962b.
Report an issue: GitHub.