Skip to content

Commit

Permalink
Fix speed regression in property binding
Browse files Browse the repository at this point in the history
Update `MapBinder` to only compute values if an entry does not already
exist. Prior to this commit, a binding to `Map<String,List<String>>`
would be expensive since the same entries would be bound many times.

For example, given:

	foo.bar[0]=baz1
	foo.bar[1]=baz1
	foo.bar[2]=baz1

The Map binder would iterate over the properties `bar[0]`, `bar[1]` and
`bar[2]`. Each of these properties resulted in the same actual key of
`bar` which would then be bound to list multiple times.

Fixes gh-10093
  • Loading branch information
philwebb committed Sep 14, 2017
1 parent 402dcb7 commit 0e32c0a
Showing 1 changed file with 2 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ public void bindEntries(ConfigurationPropertySource source,
ConfigurationPropertyName entryName = getEntryName(source, name);
Object key = getContext().getConversionService()
.convert(getKeyName(entryName), this.keyType);
Object value = this.elementBinder.bind(entryName, valueBindable);
map.putIfAbsent(key, value);
map.computeIfAbsent(key,
(k) -> this.elementBinder.bind(entryName, valueBindable));
}
}
}
Expand Down

0 comments on commit 0e32c0a

Please sign in to comment.